带选项的创建
与数据打交道的数据库的创建一定与编码有关系。创建数据库的时候,有两个编码集:
因此,数据库无论对数据做任何操作,都需要保证数据库的操作和编码必须是编码一致的。
查看系统默认支持的字符集和校验集:
查看connection、database、server的校验集:
大部分情况下,数据库的连接,数据库本身、数据库的服务器都是utf8的。在最开始的my.cnf配置中,我们把默认字符集全部配成了utf8进行统一,如果不配置,可能就会因为编码的不同导致无法正确解析数据。
查看数据库全部的字符集
查看对照表,数据库选择的就是其中的utf8的字符集。
查看数据库支持的字符集校验规则
当我们创建数据库没有指定字符集和校验规则时,系统使用默认字符集:utf8,校验规则是:utf8_general_ci。
两种方式:
、
编码集字符集同时设置:
根据字符集表以及校验表创建不同编码和校验规则的数据库
不区分大小写
创建一个数据库,校验规则使用utf8_ general_ ci[不区分大小写]
由于是不区分大小写的,所以在指定查’a’的时候,utf8_ general_ ci校验规则会将’A’和’a’一并查出:
区分大小写
创建一个数据库,校验规则使用utf8_ bin[区分大小写]
因此,校验规则的不同,我们查出的结果也有可能不同。
校验规则的不同,排序的顺序也会不同:(从小到大)
故忽略大小写时,大小写的排序不做区分。
创建数据库:create database db_name; 本质就是在/var/lib/mysql创建一个目录。
删除数据库:drop database db_name; 本质就是在/var/lib/mysql删除目录。
因此,我们可以在/var/lib/mysql上创建目录,那么数据库层面也一定会产生相应的数据库。
同理,在mysql目录中删掉一个目录,数据库层面的对应数据库也会被删掉。
当然,绝对不应该在文件系统层面创建目录从而生成对应数据库,这样是不合理的。因此mysql8.0就禁掉了这个功能,而mysql5.6支持。
如果想要确定是在哪个数据库里,可以执行:
执行删除之后的结果:
注意:不要随意删除数据库
-B:代表选择数据库的选项。
test1.sql中存储的不仅仅是test1数据库中的数据,还有历史上创建过的命令:
至此就完成了对数据库test1的备份操作。
现在,将test1数据库删掉:
这样,在/var/lib/mysql的路径下,一定也不存在test1目录。
通过pwd命令,我们知道test1.sql所在的路径:
然后,通过以下恢复命令:
此时,就可以查看到对应test1的数据库及其内容:
注意事项
如果备份的不是整个数据库,而是其中的一张表,怎么做?
同时备份多个数据库
如果备份一个数据库时,没有带上-B参数, 在恢复数据库时,需要先创建空数据库,然后使用数据库,再使用source来还原。
如果在使用数据库时,出现卡顿,那么有可能访问数据库的不止你一个,所以,通过如下命令,我们可以看到User的数量及名称Id。
这可以告诉我们当前有哪些用户连接到我们的MySQL,如果查出某个用户不是你正常登陆的,很有可能你的数据库被人入侵了。