1.创建数据库
创建数据库的SQL如下:
CREATE DATABASE [IF NOT EXISTS] db_name [[DEFAULT] CHARSET=charset_name] [[DEFAULT] COLLATE=collation_name];
说明:
• SQL中大写的表示关键字,[ ]中代表的是可选项。
• CHARSET用于指定数据库所采用的编码格式。
• COLLATE用于指定数据库所采用的校验规则。
• 加上IF NOT EXISTS表示不存在对应的db_name再创建,如果存在对应的db_name就不创建了。
注:
1.如果创建数据库时未指明数据库的编码格式或校验规则,则默认使用MySQL配置文件中对应的编码格式或校验规则。
2.mysql是大小写不敏感的。
3.如果创建的数据库名称db_name与mysql的关键字同名,则会创建失败,如果一定要创建,则需要给db_name用反引号引用(反引号是键盘在Esc下面那个键),如下图所示。
4.mysql采用的是就近原则,例如如果在/etc/my.cnf配置文件中设置了数据库默认编码规则,但是我们在创建数据库时又指定了编码规则,数据库会采用创建数据库时指定的编码规则。
2.创建数据库案例
采用默认的编码格式和校验规则创建数据库:
使用 create database db1; 命令,创建数据库时不指明数据库的编码格式和校验规则即可。如下:
注:如果没有对MySQL的配置文件进行过修改,则默认的编码格式是utf8,默认的校验规则是utf8_general_ci。
指定utf8编码格式创建数据库:
使用 create database db1; 命令,创建数据库时通过charset指明数据库的编码格式即可。如下:
注: SQL中的charset=utf8,也可以写成character set=utf8或character set utf8。
指定utf8编码格式和utf8_general_ci校验规则创建数据库:
使用 create database db3 charset=utf8 collate=utf8_general_ci; 命令,创建数据库时通过charset和collate分别指明数据库的编码格式和校验规则即可。如下:
注:SQL中的collate=utf8_general_ci,也可以写成collate utf8_general_ci。
3.字符集和校验规则
• mysql数据库要存储据和获取数据。
• 存储数据时要按照特定编码来进行存储,这由数据库的字符集(编码规则)来保证。
• 获取数据时要按照特定规则来进行获取,这由数据库的校验规则(校验码规则)来保证。
注:特定的字符集(编码规则)和特定的校验集(校验规则、校验码规则)是相互匹配的。例如字符集utf8和校验集utf8_general_ci是匹配的。
3.1.查看系统默认字符集以及校验规则
查看系统默认的字符集:
使用 show variables like 'character_set_database'; 命令,通过查看MySQL系统变量variables中的character_set_database,可以得知系统默认的字符集。如下:
注:
1.如果是在指定数据库下使用该SQL,则查看的是该数据库对应的字符集。
2.系统默认的字符集是utf8的原因是我们之前在/etc/my.cnf配置文件中设置了字符编码为utf8,如下图所示。
3.使用 show variables like 'character_set_%'; 命令可以看到其他模块的字符集。命令中百分号的意思是百分号所在位置模糊匹配,这里会将以 character_set_ 开头的内容全部显示出来。
查看系统默认的字符集校验规则:
使用 show variables like 'collation_database'; 命令,通过查看MySQL系统变量variables中的collation_database,可以得知系统默认的字符集校验规则。如下:
注:
1.如果是在指定数据库下使用该SQL,则查看的是该数据库对应的字符集校验规则。
2.使用 show variables like 'collation_%'; 命令可以看到其他模块的校验集。
3.2.查看数据库支持的字符集
查看数据库支持的字符集:
使用 show charset; 命令可以查看数据库支持的字符集。如下:
注:
1.字符集主要是控制用什么语言,比如utf8就可以使用中文。
2.上图中Charset罗列的是字符集,Default collation罗列的是所有与之对应的校验集。
3.3.查看数据库支持的字符集校验规则
查看数据库支持的字符集校验规则:
使用 show collation; 命令可以查看数据库支持的字符集校验规则。如下:
注:上图中Collation罗列的是校验集,Charset罗列的是所有与之对应的字符集。
3.4.校验规则对数据库的影响
字符集编码格式和字符集校验规则的区别:
• 字符集编码格式指的是在存储数据时各个字符的底层编码,用于指定数据的存储格式。
• 字符集校验规则是在字符集内用于比较字符的一套规则,用于对数据进行比对。
比如我们存储数据的时候是按照utf8的格式进行存储的,那么将来在对数据做比对时也必须按照utf8的格式进行比对,因为“存数据”和“取数据”的方式必须保持一致。注:在对数据库当中的数据进行增删查改时,不可避免的需要进行数据的比对,因为在对数据做增删查改之前,都需要先通过比对的方式找到目标数据。
校验规则对数据库的影响:
现在我们知道了,为了保证读取的数据和存储的数据是一致的,因此字符集编码格式和校验规则必须是对应的。但实际同一中字符集编码格式一般会有多种可选择的校验规则,比如utf8编码格式的校验规则有utf8_general_ci、utf8_bin、utf8_unicode_ci等校验规则。
使用不同的校验规则操作数据库中的数据可能会得到不同的结果,比如utf8_general_ci校验规则在比对数据时是不区分大小写的,而utf8_bin校验规则在对比数据时则是区分大小写的。
操作数据库时采用utf8_general_ci校验规则:
创建数据库时指定数据库的校验规则为utf8_general_ci,数据库的编码格式默认为utf8。如下:
在该数据库中创建一个简单的person表,由于创建未指定表的编码格式和校验规则,因此person表将继承当前数据库的编码格式和校验规则。如下:
这时向表中插入一些数据。如下:
通过select语句可以查看插入表中的数据。如下:
这时指定查看表中 name='alice' 的记录时会将Alice和alice一并筛选出来,根本原因就是utf8_general_ci校验规则在进行数据比对时是不区分大小写的。如下:
操作数据库时采用utf8_bin校验规则:
创建数据库时指定数据库的校验规则为utf8_bin,数据库的编码格式默认为utf8。如下:
在该数据库中同样创建和刚才一样的person表,该person表会将继承当前数据库的编码格式和校验规则。如下:
这时向表中插入刚才相同的数据。如下:
通过select语句可以看到表中的数据与之前相同。如下:
但这时指定查看表中 name='alice' 的记录时只会将alice筛选出来,根本原因就是utf8_bin校验规则在进行数据比对时是区分大小写的。如下:
4.操纵数据库
4.1.查看数据库
使用 show databases; 命令可以查看系统中所有的数据库。如下:
4.2.显示创建语句
使用 show create database 数据库名; 命令可以查看对应数据库的创建语句。如下:
注:
1.MySQL建议SQL中的关键字使用大写,但不是必须的。
2.数据库的名字加上反引号,是为了防止使用的数据库名与关键字冲突。
3./*!40100 DEFAULT CHARACTER SET utf8 */不是注释,它表示当前MySQL版本如果大于4.10,则执行后面的SQL语句。
4.3.修改数据库
修改数据库的SQL如下:
ALTER DATABASE db_name [[DEFAULT] CHARSET=character_name] [[DEFAULT] COLLATE=collation_name];
说明一下:
• 对数据库的修改主要指的是修改数据库的字符集或校验规则。
使用 alter database db1 charset=gbk collate=gbk_bin; 命令,将数据库的字符集改为gbk,并将数据库的校验规则改为gbk_bin。如下:
4.4.删除数据库
删除数据库的SQL如下:
DROP DATABASE [IF EXISTS] db_name;
删除数据库后该数据库对应的文件夹就被删除了。比如:
并且删除数据库后,该数据库下的所有表也都会被级联删除,因此不要随意删除数据库。
4.5.备份和恢复
4.5.1.数据库备份和恢复
数据库备份:
使用如下命令即可对指定数据库进行备份:
mysqldump -P 端口号 -u 用户名 -p 密码 -B 数据库名1 数据库名2 ... > 数据库备份存储的文件路径
为了演示数据库备份,下面我们创建一个数据库,并在该数据库中创建两个表。如下:
在student表中插入两条记录。如下:
在teacher表中也插入两条记录。如下:
这时在命令行中执行如下命令即可将该数据库进行备份,并指定将备份后产生的文件存放在当前目录下。如下:
打开back.sql文件即可看到,文件中的内容实际就是我们在该数据库中执行的各种SQL命令,包括创建数据库、创建表、插入数据等SQL语句。如下:
数据库备份有两种,一种是对数据库中的数据做备份,另一种是对操作语句做备份,这里mysql的mysqldump是将所有的操作语句做备份。
数据库恢复:
使用如下命令即可对指定数据库进行恢复:
source 数据库备份存储的文件路径
为了演示数据库恢复,我们先将刚才创建的数据库删除。如下:
这时使用 source back.sql; 命令让MySQL服务器执行如下命令即可对数据库进行恢复。如下:
实际恢复数据库的时候就是按顺序执行数据库备份文件中的SQL语句,执行完毕后数据库也就恢复出来了。如下:
同时该数据库下的两张表,以及表当中的数据也都恢复出来了。如下:
4.5.2.表的备份和恢复
表备份:
表恢复: