文章目录
创建数据库
语法:
CREATE DATABASE [IF NOT EXISTS] db_name [create_specification ], [create_specification]
IF NOT EXISTS
选项 表示不存在则创建db_name
表示创建数据库的名字create_specification
表示初始化数据库的字符集或者是校验编码,其设置格式如下:CHARACTER SET charset_name
,设置字符集为charset_nameCOLLATE collation_name
,设置校验码为collation_name
给出以下创建数据库的案例
案例
1.简单创建一个数据库
create database db1;
这条语句并没有声明数据库的字符集和校验规则,系统默认使用字符集:utf8
,检验规则默认:utf8_general_ci
.
2.设置字符集和校验规则
语句:
create database db1 charset=utf8 collate utf8_general_ci;
注意charset=utf8
等价于character set utf8
字符集和校验规则
查看系统默认字符集以及校验规则
语句:
show variables like 'character_set_database';
show variables like 'collation_database';
utf8mb4
是utf8
的扩展,支持Unicode字符。老一点版本的mysql是utf8
查看数据库支持的字符集和校验规则
语句:
show charset;//查看数据库支持的字符集
show collation;//查看数据库支持的校验规则
字符集和校验规则的作用
字符集和校验规则决定了存储字符数据的格式以及比较字符数据的格式。
字符集
字符集定义了可以存储在数据库中字符的范围。常见的字符集有:
- utf8:每个字符1-3个字节,可以存储世界上几乎所有语言字符,但是不支持Unicode字符。
- utf8mb4:扩展的utf8编码,支持所有的Unicode字符,包括符号表情
作用:字符集决定文本数据如何 编码和存储,选择合适的字符集可以节省存储空间。
校验规则
校验规则定义了如何比较和排序字符数据。每个字符集都有诺干个校验规则,这也是为什么通过show collation
显示的数据会比字符集多。比如:utf8_general_ci
和utf8_unicode_ci
都是utf8的字符集校验规则。其中:
_ci
表示不区分大小写_cs
表示区分大小写_bin
表示二进制比较,完全区分大小写和重音 。
作用:以utf8_general_ci
和utf8_bin
为例,如果采用utf8_general_ci
为校验规则,在比较字符串时,”A"和”a”被视为相等的。而utf8_bin
则认为不相等。合理的校验规则能够提高我们的查询速度,同时也能保证查询的准确度。
总结
字符集决定了数据怎么写入数据库,而校验规则决定了如何从数据库中读取数据。正确的设置互相匹配的字符集和校验规则可以使我们保证数据一致性,大多数的乱码问题都是因为字符集与校验规则的不匹配问题导致的。
操作数据库
查看数据库
show databases;
显示创建
show create databases db_name;
- MySQL建议关键字大写,但并不是必须的
- 数据库名字的反引号
' '
是为了防止数据库名和关键字冲突 /*!40100 default.... */
这个不是注释,表示当前mysql版本大于4.01版本,就执行这句话。这也是为什么我们默认的数据库字符集是utf8mb4
。
修改数据库
alter database db_name [alter_spacification]...
alter_spacification
表示要修改的字符集或者是校验规则
删除数据库
drop database [if exists] db_name;
数据库的备份和恢复
备份
备份语句需要退出mysql.
mysqldump -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径
- 数据库名可以有多个,中间用空格隔开,表示一起备份
- 备份的时候如果没有带-B
这样,我们就把数据库db1备份到了db1.sql文件中,这时可以打开看看 .sql 文件里的内容,其实把我们整个创建数据库,建表,导入数据的语句都装载这个文件中。
还原
source /sql文件的路径;
所谓的还原数据库其实就是把.sql文件里的sql语句全部执行一遍。
当然,我们也可以使用上面的指令来备份数据库中的某一张表,做法还是一样的,例如:
mysqldump -u root -p 数据库名 表名1 表名2 > 存储路径
查看连接用户
如果我们想查看当前有哪些用户连接到我们的MySQL,可以使用以下指令查看连接情况
show processlist