文章目录
- 前言
- Ⅰ. 创建数据库
- 1、语法
- 2、举例
 
- Ⅱ. 字符集和校验规则
- 1、查看系统默认字符集以及校验规则
- 2、查看数据库支持的字符集
- 3、查看数据库支持的字符集校验规则
- 4、校验规则对数据库的影响
 
- Ⅲ. 操作数据库
- 1、查看数据库
- 2、显示创建语句
- 3、使用数据库
- 4、删除数据库
- 5、修改数据库
- 6、查看连接情况
- 7、备份和恢复
- 1、备份
- 2、恢复
- 💥注意事项
 
 
前言
 接下来学的数据库的操作以及表的结构操作,都是属于我们之前讲的 DDL 也就是数据定义语言,它负责的是对结构的管理,而不是对数据内容的管理!
Ⅰ. 创建数据库
1、语法
create database [if not exists] db_name [create_specification, create_specification, ...]
其中create_specification为:
[default] character set charset_name
[default] collate collation_name
- 选项说明: 
  - 大写的表示关键字(用小写也是可以的,但是建议用大写区分开,因为个人习惯,这里的关键字包括后面统一使用小写)
- 方括号内的是可选项: 
    - CHARACTER SET:指定数据库采用的字符集,相当于 数据写入数据库时的格式
- COLLATE:指定数据库字符集的校验规则,相当于 读取数据库数据时的格式
 
 
- 当我们创建数据库没有指定字符集和校验规则时,系统使用默认字符集:utf8,校验规则是:utf8_general_ci
2、举例
-  创建名为 d1的数据库:create database d1; 
-  创建一个使用 utf8字符集的db2数据库:create database db2 character set utf8; 或者 create database db2 charset=utf8; 
-  创建一个使用 utf8字符集,并带对应校验规则的db3数据库:create database db3 character set utf8 collate utf8_general_ci; 或者 create database db3 character=utf8 collate utf8_general_ci; 
 因为上面的例子中我们设的字符集和校验规则都是和默认配置中的是一样的,所以看不出来什么效果,下面我们在讲字符集和校验规则的时候会举一点不同的例子!
Ⅱ. 字符集和校验规则
1、查看系统默认字符集以及校验规则
show variables like 'character_set_database';
show variables like 'collation_database';

 其实我们是可以使用 匹配符 % 来看看其它部件设定的字符集以及校验规则:

2、查看数据库支持的字符集
 字符集主要是控制用什么语言,比如 utf8 就可以使用中文。
show charset;

3、查看数据库支持的字符集校验规则
show collation;

4、校验规则对数据库的影响
 我们还是要看看校验规则的不同,会有什么样子的效果,下面我们用两个不同校验规则的数据库来做测试!
 首先我们创建两个字符集相同,但是校验规则不同的数据库:
-  不区分大小写 -  创建一个数据库,校验规则使用 utf8_general_ci[不区分大小写]create database db1 charset=utf8 collate utf8_general_ci; use db1;
-  创建一个表: 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');
 
-  
-  区分大小写 -  创建一个数据库,校验规则使用 utf8_bin[区分大小写]create database db2 charset=utf8 collate utf8_bin; use db1;
-  创建一个表: 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');
 
-  
 然后下面我们分别对两个数据库特定的字符进行查询和排序:
-  查询 -  不区分大小写的查询以及结果: mysql> use db1; Database changed mysql> select * from person where name='a'; +------+ | name | +------+ | a | | A | +------+ 2 rows in set (0.00 sec)
-  区分大小写的查询以及结果: mysql> use db2; Database changed mysql> select * from person where name='a'; +------+ | name | +------+ | a | +------+ 1 row in set (0.00 sec)
-  可以看到,不区分大小写的校验规则,查询结果是 a和A,因为它们是一样的!而对于区分大小写的校验规则,查询结果就是唯一的a。
 
-  
-  排序 -  不区分大小写排序以及结果: mysql> use db1; Database changed mysql> select * from person order by name; +------+ | name | +------+ | a | | A | | b | | B | +------+ 4 rows in set (0.00 sec)
-  区分大小写排序以及结果: mysql> use db2; Database changed mysql> select * from person order by name; +------+ | name | +------+ | A | | B | | a | | b | +------+ 4 rows in set (0.00 sec)
-  可以看到,不区分大小写的话, a和A是排在一起的,并且是不关ASCII值大小的,但是总体会比b和B小;对于区分大小写来说,就是按照ASCII值来排序的!
 
-  
 最后总结一句话,一般我们都是在配置文件中写好默认的字符集和校验规则,并且直接创建数据库即可,很少需要手动去设置其它的编码规则!
Ⅲ. 操作数据库
1、查看数据库
show databases;
2、显示创建语句
show create database db_name;

- 说明: 
  - MySQL建议我们关键字使用大写,但是不是必须的。
- 数据库名字的反引号``,是为了防止使用的数据库名刚好是关键字。
- /*!40100 default.... */这个不是注释,表示当前- mysql版本大于- 4.01版本,就执行这句语句!
 
3、使用数据库
use db_name;
 有时候可能我们使用时间长了,不知道当前在使用那个数据库,那么我们可以调用一个 database() 函数,如下所示:
select database();

4、删除数据库
drop database [if exists] db_name;
执行删除之后的结果:
- 数据库内部看不到对应的数据库。
- 对应的数据库文件夹被删除,级联删除,里面的数据表全部被删。
注意:不要随意删除数据库!
5、修改数据库
alter database db_name [alter_spacification, alter_spacification, ...]
其中alter_spacification:
[default] character set charset_name
[DEFAULT] collate collation_name
- 说明: 
  - 对数据库的修改主要指的是修改数据库的字符集,校验规则
 
 举个例子,将 db1 数据库字符集改成 gbk:

6、查看连接情况
show processlist;

 可以告诉我们当前有哪些用户连接到我们的 MySQL,如果查出某个用户不是你正常登陆的,很有可能你的数据库被人入侵了。以后发现自己数据库比较慢时,可以用这个指令来查看数据库连接情况。
7、备份和恢复
1、备份
 语法如下所示:
mysqldump -P3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径(一般备份为.sql文件)
 举个例子,将之前的 db1 数据库备份到文件(退出连接):
[root@VM-8-7-centos ~]# pwd
/root
[root@VM-8-7-centos ~]# mysqldump -P3306 -uroot -p -B db1 > db1.sql
[root@VM-8-7-centos ~]# ls
db1.sql
 这时,可以打开看看 db1.sql 文件里的内容,其实它把我们整个创建数据库,建表,导入数据的语句都装载这个文件中,这样子是为了在恢复数据库的时候的操作!

2、恢复
 语法如下所示:
source 数据库备份存储的文件路径;
 注意这是在数据库中的操作!
 下面我们将 db 数据库进行恢复:
mysql> show databases;
+---------------------+
| Database            |
+---------------------+
| information_schema  |
| README_TO_RECOVER_A |
| mysql               |
| performance_schema  |
| sys                 |
+---------------------+
5 rows in set (0.00 sec)
mysql> source /root/db.sql;				#进行恢复
Query OK, 0 rows affected (0.00 sec)
Database changed
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0
……
……
mysql> show databases;		#查看数据库,多了db
+---------------------+
| Database            |
+---------------------+
| information_schema  |
| README_TO_RECOVER_A |
| db                  |
| mysql               |
| performance_schema  |
| sys                 |
+---------------------+
6 rows in set (0.00 sec)
mysql> use db;
Database changed
mysql> select * from person;	#原来的数据都还在
+------+
| name |
+------+
| a    |
| A    |
| b    |
| B    |
+------+
4 rows in set (0.00 sec)
💥注意事项
-  如果备份的不是整个数据库,而是其中的一张表的话: mysqldump -u root -p 数据库名 表名1 表名2 > 数据库备份存储的文件路径(一般备份为.sql文件)
-  同时备份多个数据库: mysqldump -u root -p -B 数据库名1 数据库名2 ... > 数据库存放路径
-  如果备份一个数据库时,没有带上 -B参数, 在恢复数据库时,需要先创建空数据库,然后使用数据库,再使用source来还原。


















