数据库和表的简单操作
创建数据库CREATE DATABASE db_name ;
create_specification:
CHARACTER SET charset_name
COLLATE collation_name
分析:
[*]大写的是关键字
[*][]是可选项
[*]character set:指定数据库采用的字符集
[*]collate:指定数据库字符集的校验规则
创建数据库本质就是在/var/lib/mysql创建一个目录
创建数据库的时候,有两个编码集:
[*]数据库编码集—数据库未来存储数据
[*]数据库校验集—支持数据库举行字段比力使用的编码,本质也是一种读取数据库中数据所采用的编码格式
数据库无论对数据做任何操作,都必须包管操作和编码必须是编码一致的。
创建数据库案例
当我们创建数据库没有指定字符集和校验规则时,体系使用默认字符集:utf8,校验规则是:utf8_ general_ ci
[*] 创建一个使用utf8字符集的 db1 数据库
create database if not exists db1 charset=utf8;
https://i-blog.csdnimg.cn/direct/a1d55d46a8884487bcb2a80c270e9d38.png#pic_center
[*] 创建一个使用utf8字符集,并带校验规则的 db2 数据库
create database if not exists db2 charset=utf8 collate utf8_general_ci;
https://i-blog.csdnimg.cn/direct/b2629d06f8e74108b84cd3336658ebb2.png#pic_center
字符集和校验规则
查看体系默认字符集以及校验规则
show variables like 'character_set_database';
show variables like 'collation_database';
https://i-blog.csdnimg.cn/direct/4229fc9363514b40928dfaa0f6d62db9.png#pic_center
查看数据库支持的字符集
show charset;
字符集主要是控制用什么语言,比如utf8就可以使用中文
https://i-blog.csdnimg.cn/direct/46ab0f5f2b2c4b2b889a6f7825479bc0.png#pic_center
查看数据库支持的字符集校验规则
show collation;
校验规则对数据库的影响
例如对于巨细写的区分
创建一个校验规则使用utf8_general_ci的数据库[不区分巨细写]
create database test1 collate utf8_general_ci;
use test1;
create table person(name varchar(20));
insert into person values('a');
insert into person values('A');
insert into person values('b');
insert into person values('B');
https://i-blog.csdnimg.cn/direct/db67045a1f5647e9bea21138eee5c059.png#pic_center
创建一个数据库,校验规则使用utf8_ bin[区分巨细写]
create database test2 collate utf8_bin;
use test;
create table person(name varchar(20));
insert into person values('a');
insert into person values('A');
insert into person values('b');
insert into person values('B');
https://i-blog.csdnimg.cn/direct/1cc4fdfe62e54cf4a5ff40c9df2450ff.png#pic_center
举行查询和排序的效果:
不区分巨细写的查询以及排序的效果
mysql> select * from person where name='a';
+------+
| name |
+------+
| a |
| A |
+------+
2 rows in set (0.00 sec)
mysql> select * from person order by name;
+------+
| name |
+------+
| a |
| A |
| b |
| B |
+------+
4 rows in set (0.00 sec)
区分巨细写的查询以及排序的效果
mysql> select * from person where name='a';
+------+
| name |
+------+
| a |
+------+
1 row in set (0.00 sec)
mysql> select * from person order by name;
+------+
| name |
+------+
| A |
| B |
| a |
| b |
+------+
4 rows in set (0.00 sec)
操纵数据库
查看数据库
show databases;
显示创建语句
show create database 数据库名;
https://i-blog.csdnimg.cn/direct/b6700660d4ff4258a49351d427e5599d.png#pic_center
分析:
[*]MySQL建议我们关键字使用大写,但是不是必须的。
[*]数据库名字的反引号` `是为了防止使用的数据库名刚好是关键字。
[*]/*!40100 default.... */这个不是注释,体现当前mysql版本大于4.01版本,就实行这句话。
修改数据库
ALTER DATABASE db_name ...];
alter_spacification:
CHARACTER SET charset_name
COLLATE collation_name
对数据库的修改主要指的是修改数据库的字符集、校验规则
示例:将test2数据库字符集改成gbk
https://i-blog.csdnimg.cn/direct/700ba940e3e64e51ae405751041c23cb.png#pic_center
数据库删除
drop database db_name;
实行删除之后的效果:
[*]数据库内部看不到对应的数据库
[*]对应的数据库文件夹被删除,级联删除,里面的数据表全部被删
备份和规复
备份
mysqldump -P3306 -u root -p -B 数据库名 > 数据库备份存储的文件路径
示例:将test1库备份到文件
mysqldump -uroot -p -B test1 >./mytest.sql
https://i-blog.csdnimg.cn/direct/b0c28bd095fa404e90cc2aa75b8965ba.png#pic_center
这时,打开mytest.sql文件里的内容,其实把我们整个创建数据库、建表、导入数据的语句到装载到这个文件中
https://i-blog.csdnimg.cn/direct/d5a124a918234dfaab341641d12b9fb3.png#pic_center
还原
mysql> source /home/liuxu/test/mytest.sql;
注意事项
如果备份的不是整个数据库,而是其中的一张表呢?
mysqldump -uroot -p 数据库名 表名1 表名2 >./mytest.sql
同时备份多个数据库
mysqldump -uroot -p-B 数据库名1 数据库名2 >./mytest.sql
如果备份一个数据库时,没有带上-B参数,在规复数据库时,需要先创建空数据库,然后使用数据库,再使用source来还原。
以此来做到对数据库重命名
查看连接情况
show processlist;
https://i-blog.csdnimg.cn/direct/2f32d7cbf688414495bc61135c791a8d.png#pic_center
可以告诉我们当前有哪些用户连接到我们的MySQL,如果查出某个用户不是自己正常登岸的,很有可能你的数据库是被人入侵了。
创建表
语法:
create table table_name(
field1 datatype,
field2 datatype,
field3 datatype
)charset=字符集 collate=校验规则 engine 存储引擎;
分析:
[*]field 体现列明
[*]datatype 体现列的范例
[*]character set 字符集,如果没有指定字符集,则以地点数据库的字符集为准
[*]collate 校验规则,如果没有指定校验规则,则以地点数据库的校验规则为准
创建表案例
mysql> create table user(
-> id int,
-> name varchar(20) comment '用户名',
-> password char(32) comment '密码是32位的md5值',
-> birthday date comment '生日'
-> )charset=utf8 engine MyISAM;
Query OK, 0 rows affected (0.02 sec)
分析:
[*] comment 对该列举行笔墨分析
[*] 差别的存储引擎,创建表的文件不一样
user表存储引擎是MyISAM,在数据库中有三个差别的文件,分别是:
[*]user.frm:表结构
[*]user.MYD:表数据
[*]user.MYI:表索引
https://i-blog.csdnimg.cn/direct/6d5c996f0dc848bf9f883e9a9fd1feda.png#pic_center
查看表结构
desc 表名;
https://i-blog.csdnimg.cn/direct/e15498510823428cb2d23382b0135eea.png#pic_center
修改表
在项目实际开发中,要经常修改某个表的结构,比如字段名字、字段巨细、字段范例、表的字符集范例、表的存储引擎等等,大概是添加字段、删除字段等。这时我们就需要修改表。
案例:
[*] 在user表中添加两条纪录
mysql> insert into user values(1,'a','b','1982-01-04'),(2,'b','c','1984-01-03');
[*] 在user表中添加一个字段,用于保存图片路径
mysql> alter table user add assets varchar(100) comment '图片路径' after birthday;
mysql> desc user;
+----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| id | int(11) | YES| | NULL | |
| name | varchar(20)| YES| | NULL | |
| password | char(32) | YES| | NULL | |
| birthday | date | YES| | NULL | |
| assets | varchar(100) | YES| | NULL | |
+----------+--------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
插入新字段后,对原来表中的数据是没有影响的:
mysql> select * from user;
+------+------+----------+------------+--------+
| id | name | password | birthday | assets |
+------+------+----------+------------+--------+
| 1 | a | b | 1982-01-04 | NULL |
| 2 | b | c | 1984-01-03 | NULL |
+------+------+----------+------------+--------+
2 rows in set (0.00 sec)
[*] 修改name,将其长度改成60
mysql> alter table user modify name varchar(60);
mysql> desc user;
+----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| id | int(11) | YES| | NULL | |
| name | varchar(60)| YES| | NULL | |
| password | char(32) | YES| | NULL | |
| birthday | date | YES| | NULL | |
| assets | varchar(100) | YES| | NULL | |
+----------+--------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
[*] 删除password列
删除字段一定要警惕,删除字段及其对应的列数据都没了
mysql> alter table user drop password;
mysql> desc user;
+----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| id | int(11) | YES| | NULL | |
| name | varchar(60)| YES| | NULL | |
| birthday | date | YES| | NULL | |
| assets | varchar(100) | YES| | NULL | |
+----------+--------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
[*] 修改表名位employee
to可以省掉
mysql> alter table user rename to employee;
mysql> select * from employee;
+------+------+------------+--------+
| id | name | birthday | assets |
+------+------+------------+--------+
| 1 | a | 1982-01-04 | NULL |
| 2 | b | 1984-01-03 | NULL |
+------+------+------------+--------+
2 rows in set (0.00 sec)
[*] 将name列修改为xingming
mysql> alter table employee change name xingming varchar(60);--新字段需要完整定义
mysql> desc employee;
+----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| id | int(11) | YES| | NULL | |
| xingming | varchar(60)| YES| | NULL | |
| birthday | date | YES| | NULL | |
| assets | varchar(100) | YES| | NULL | |
+----------+--------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
删除表
语法:
drop table table_name;
示例:
mysql> drop table if exists employee;
mysql> show tables;+-----------------+| Tables_in_test1 |+-----------------+| employee || person |+-----------------+2 rows in set (0.00 sec)mysql> drop table if exists employee;
Query OK, 0 rows affected (0.01 sec)mysql> show tables;+-----------------+| Tables_in_test1 |+-----------------+| person |+-----------------+1 row in set (0.00 sec)
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]