

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

创建数据库是数据库管理的第一步。我们可以使用 CREATE DATABASE 或 CREATE SCHEMA 命令。
CREATE DATABASE 语法详解创建数据库的基本语法如下:
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]: 中括号表示是可选项。{...}: 大插号表示必须选。

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

如果重复运行 代码块 3 的语句,系统将不会报错,但会产生一个警告:
代码块 4:查看警告信息
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 的数据库已存在。

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

要查看当前数据库系统支持的所有排序规则,可以使用 SHOW COLLATION 命令。
代码块 6:查看排序规则
show collation;
utf8mb4_0900_ai_ci,MySQL 5.7 默认排序规则是 utf8mb4_general_ci。此处由于列出篇幅过长,截图不完整。排序规则决定了字符串的比较和排序方式。
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: 表示二进制。我们可以通过查看系统变量来了解当前的默认设置。
代码块 7:查看系统默认字符集
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:查看系统默认排序规则
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 |

在创建数据库时,最佳实践是显式指定字符集和排序规则。
代码块 9:指定字符集与排序规则创建数据库
create database if not exists java01
character set utf8mb4 collate utf8mb4_0900_ai_ci;SHOW CREATE DATABASE)创建完成后,可以使用 SHOW CREATE DATABASE 命令查看数据库的精确创建语句。
SHOW CREATE DATABASE 语法show create database db_name查看我们刚刚创建的 java01 数据库的创建语句:
代码块 10:查看创建语句
mysql> show create database java01;示例输出(部分):
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 时,会分别执行对应的语句。
对数据库的修改操作主要是修改其字符集和校验规则。
ALTER DATABASE 语法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}将数据库 test001 的字符集修改为 gbk:
代码块 11:修改字符集
mysql> alter database test001 character set gbk;
Query OK, 1 row affected (0.01 sec)
mysql> show create database test001;修改后的结果(部分):
CREATE DATABASE test001 /*!40100 DEFAULT CHARACTER SET gbk */ /*!80016 DEFAULT ENCRYPTION='N' */
删除数据库是一个非常危险的操作,操作前务必谨慎。
DROP DATABASE 语法与示例删除数据库的语法如下:
DROP {DATABASE | SCHEMA} [IF EXISTS] db_name代码块 12:删除数据库
mysql> drop database testdb;
Query OK, 0 rows affected (0.04 sec)
show databases; 语句将无法再查看该数据库。本文详细梳理了MySQL数据库的 CRUD (Create, Retrieve, Update, Delete) 基础操作,并深入探讨了字符集与排序规则对数据存储和检索的影响。其中,utf8mb4 字符集和 utf8mb4_0900_ai_ci 排序规则是 MySQL 8.0 的默认推荐设置。
最后,请思考一个问题: 如果你创建了一个使用 gbk 字符集的数据库,并在其中插入了 Emoji 字符(GBK 不支持),MySQL 会如何处理这个数据?欢迎在评论区留下你的见解!