1. 数据库操作目标与基础
学习本节内容,我们的主要目标是掌握创建、查看、修改和删除数据库。在此基础上,我们还需要深入理解 字符集编码 和 排序规则 的概念。
2. 查看现有数据库
在进行任何数据库操作之前,通常需要先查看当前系统中已存在的数据库列表。
2.1 SHOW DATABASES 语法
使用 SHOW DATABASES 命令可以列出所有数据库。
代码块 1:查看所有数据库
sql
show databases;
要点提示:
databases是复数形式。该关键字是大小写不敏感的。

3. 创建数据库(CREATE DATABASE)
创建数据库是数据库管理的第一步。我们可以使用 CREATE DATABASE 或 CREATE SCHEMA 命令。
3.1 CREATE DATABASE 语法详解
创建数据库的基本语法如下:
sql
1 CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [create_option]
2
3 create_option: [DEFAULT] {
4 CHARACTER SET [=] charset_name
5 | COLLATE [=] collation_name
6 | ENCRYPTION [=] {'Y' | 'N'}
7}
其中:
CREATE DATABASE | SCHEMA: 大写部分表示关键字。|表示任选其中一个。db_name: 表示自定义的数据库名。[IF NOT EXISTS]: 中括号表示是可选项。{...}: 大插号表示必须选。

3.2 创建参数:字符集与排序规则
在创建数据库时,可以指定以下重要的可选参数:
| 参数名称 | 描述 |
|---|---|
CHARACTER SET |
指定数据库采用的字符集编码 |
COLLATE |
指定数据库字符集的校验(排序)规则 |
ENCRYPTION |
数据库是否加密,这是 MySQL 8.0.16 中引入的新选项 |
3.3 数据库创建实战示例
代码块 2:基础数据库创建
创建一个名为 test001 的数据库:
sql
mysql> create database test001;
Query OK, 1 row affected (0.01 sec)
代码块 3:条件性数据库创建
创建一个名为 testdb 的数据库,如果它不存在则创建 (IF NOT EXISTS):
sql
mysql> create database if not exists testdb;
Query OK, 1 row affected (0.01 sec)

数据库创建成功后,MySQL 会在数据目录下生成一个与数据库同名的目录,用于保存数据库中的所有数据。

3.4 查看创建过程中的警告信息
如果重复运行 代码块 3 的语句,系统将不会报错,但会产生一个警告:
代码块 4:查看警告信息
sql
mysql> create database if not exists testdb;
Query OK, 1 row affected, 1 warning (0.01 sec)
mysql> show warnings;
执行 SHOW WARNINGS; 后,可以看到警告信息:
| Level | Code | Message |
|---|---|---|
| Note | 1007 | Can't create database 'testdb'; database exists |
这提示名为 testdb 的数据库已存在。

4. 字符集编码与校验规则深度解析
字符集编码(Character Set)和校验规则(Collation)是影响数据库数据存储、检索、和比较的关键因素。
4.1 查看数据库支持的字符集编码
要查看当前数据库系统支持的所有字符集编码,可以使用 SHOW CHARSET 命令。
代码块 5:查看字符集
sql
show charset;
- 默认值: MySQL 8.0 默认的字符集编码是
utf8mb4,而 MySQL 5.7 默认的字符集是latin1。

4.2 查看数据库支持的排序规则
要查看当前数据库系统支持的所有排序规则,可以使用 SHOW COLLATION 命令。
代码块 6:查看排序规则
sql
show collation;

- 默认值: MySQL 8.0 默认的排序规则是
utf8mb4_0900_ai_ci,MySQL 5.7 默认排序规则是utf8mb4_general_ci。此处由于列出篇幅过长,截图不完整。
4.3 排序规则(Collation)对数据库的影响
排序规则决定了字符串的比较和排序方式。
utf8mb4编码是对 Unicode 字符集的一种实现,用 1 到 4 个字节表示一个字符,可以表示世界上几乎所有的字符。utf8mb4_0900_ai_ci是 MySQL 8.0 引入的新规则,它基于 UCA 9.0.0 算法。- 敏感/不敏感规则缩写:
ai: Accent-insensitive 的缩写,表示口音不敏感。ci: Case-insensitive 的缩写,表示大小写不敏感。as: Accent-sensitive 的缩写,表示口音敏感。cs: Case-sensitive 的缩写,表示大小写敏感。bin: 表示二进制。
4.4 查看系统默认字符集与排序规则
我们可以通过查看系统变量来了解当前的默认设置。
代码块 7:查看系统默认字符集
sql
mysql> show variables like '%character%';
| Variable_name | Value |
|---|---|
character_set_client |
utf8mb4 |
character_set_connection |
utf8mb4 |
character_set_database |
utf8mb4 |
character_set_server |
utf8mb4 |

代码块 8:查看系统默认排序规则
sql
mysql> show variables like '%collation%';
| Variable_name | Value |
|---|---|
collation_connection |
utf8mb4_0900_ai_ci |
collation_database |
utf8mb4_0900_ai_ci |
collation_server |
utf8mb4_0900_ai_ci |

4.5 创建数据库时指定字符集和校验规则
在创建数据库时,最佳实践是显式指定字符集和排序规则。
代码块 9:指定字符集与排序规则创建数据库
sql
create database if not exists java01
character set utf8mb4 collate utf8mb4_0900_ai_ci;
5. 查看数据库创建语句 (SHOW CREATE DATABASE)
创建完成后,可以使用 SHOW CREATE DATABASE 命令查看数据库的精确创建语句。
5.1 SHOW CREATE DATABASE 语法
sql
show create database db_name
5.2 示例
查看我们刚刚创建的 java01 数据库的创建语句:
代码块 10:查看创建语句
sql
mysql> show create database java01;
示例输出(部分):
sql
Database | Create Database
-----------------------------------------------------------------------------------------------------
java01 | CREATE DATABASE java01 /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */

注意: 数据库名字的反引号 ````` 是为了防止使用的数据库名刚好是关键字。
/*!40100 DEFAULT... */这样的格式并不是注释,它表示当 MySQL 版本大于 4.01 和 8.0.16 时,会分别执行对应的语句。
6. 修改数据库(ALTER DATABASE)
对数据库的修改操作主要是修改其字符集和校验规则。
6.1 ALTER DATABASE 语法
sql
1 ALTER DATABASE | SCHEMA [db_name]
2 alter_option ...
3 alter_option: {
4 [DEFAULT] CHARACTER SET [=] charset_name
5 | [DEFAULT] COLLATE [=] collation_name
6 | [DEFAULT] ENCRYPTION [=] {'Y' | 'N'}
7 | READ ONLY [=] {DEFAULT |0|1}
8}
6.2 修改数据库字符集示例
将数据库 test001 的字符集修改为 gbk:
代码块 11:修改字符集
sql
mysql> alter database test001 character set gbk;
Query OK, 1 row affected (0.01 sec)
mysql> show create database test001;
修改后的结果(部分):
sql
CREATE DATABASE test001 /*!40100 DEFAULT CHARACTER SET gbk */ /*!80016 DEFAULT ENCRYPTION='N' */

7. 删除数据库(DROP DATABASE)
删除数据库是一个非常危险的操作,操作前务必谨慎。
7.1 DROP DATABASE 语法与示例
删除数据库的语法如下:
sql
DROP {DATABASE | SCHEMA} [IF EXISTS] db_name
代码块 12:删除数据库
sql
mysql> drop database testdb;
Query OK, 0 rows affected (0.04 sec)

7.2 ⚠️ 注意事项:删除操作的风险
- 危险操作: 不要随意删除数据库。
- 物理删除: 删除数据库之后,数据库对应的目录及其中的所有文件也会被删除。
- 不可见: 删除后,使用
show databases;语句将无法再查看该数据库。
⭐ 总结与思考
本文详细梳理了MySQL数据库的 CRUD (Create, Retrieve, Update, Delete) 基础操作,并深入探讨了字符集与排序规则对数据存储和检索的影响。其中,utf8mb4 字符集和 utf8mb4_0900_ai_ci 排序规则是 MySQL 8.0 的默认推荐设置。
最后,请思考一个问题: 如果你创建了一个使用 gbk 字符集的数据库,并在其中插入了 Emoji 字符(GBK 不支持),MySQL 会如何处理这个数据?欢迎在评论区留下你的见解!

