/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */
#content_views .toc,
/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */
#content_views.markdown_views > p:empty:has(+ .toc),
#content_views.markdown_views > .toc + p:empty,
/* 富文本旧版目录标记 */
#content_views.htmledit_views #main-toc,
#content_views.htmledit_views #hr-toc,
#content_views.htmledit_views p[id*=\”-toc\”] {
display: none !important;
}
/* 目录去掉后,紧跟的首个标题不再多出一块上边距 */
#content_views.markdown_views > .toc + h1,
#content_views.markdown_views > .toc + h2,
#content_views.markdown_views > .toc + h3,
#content_views.markdown_views > .toc + h4,
#content_views.markdown_views > .toc + p:empty + h1,
#content_views.markdown_views > .toc + p:empty + h2,
#content_views.markdown_views > .toc + p:empty + h3,
#content_views.markdown_views > .toc + p:empty + h4 {
margin-top: 0 !important;
}
MySQL 数据库(库)的操作
目录
- 一、本节目标
- 二、查看数据库
- 三、创建数据库
- 3.1 语法
- 3.2 示例
- 四、字符集编码与校验(排序)规则
- 4.1 查看支持的字符集编码
- 4.2 查看支持的排序规则
- 4.3 不同字符集与排序规则的影响
- 4.4 查看系统默认字符集和排序规则
- 4.5 创建数据库时指定字符集和校验规则
- 五、查看创建语句
- 六、修改数据库
- 七、删除数据库
- 八、小结与常见坑
一、本节目标
本节围绕 MySQL 中"库(Database)"这一层级展开,学完后你应该能够:
前置说明:MySQL 中 DATABASE 与 SCHEMA 是同义词,CREATE DATABASE 等价于 CREATE SCHEMA,下文统一使用 DATABASE。
二、查看数据库
语法:
SHOW DATABASES;
说明:
- 该语句不需要任何参数,执行后返回当前用户有权限看到的所有数据库名。
- 结果中通常会出现以下几个系统自带库,不要删除:
| information_schema | 元数据库,存放所有库、表、列、权限等结构信息 |
| mysql | 用户、权限、存储过程等系统核心数据 |
| performance_schema | 性能统计与监控数据 |
| sys | 基于 performance_schema 的视图封装,便于运维查看 |
补充: 如果想按条件过滤,可以用 LIKE:
SHOW DATABASES LIKE 'test%';
三、创建数据库
3.1 语法
CREATE DATABASE [IF NOT EXISTS] 数据库名
[DEFAULT] CHARACTER SET 字符集名
[DEFAULT] COLLATE 排序规则名;
要点解读:
- IF NOT EXISTS:可选子句。加上它,如果同名数据库已存在,则不报错、直接跳过;不加则重复创建会抛出 ERROR 1007。
- 数据库名:建议与业务相关,使用小写字母、数字和下划线,避免使用 MySQL 保留字(如 order、group、select)。若必须使用,需用反引号包裹,如 CREATE DATABASE `order`;
- CHARACTER SET:指定字符集,决定能存储哪些字符(如中文、emoji)。
- COLLATE:指定排序规则,决定字符串比较和排序的规则。
- 若两者都不指定,则使用系统默认值(见第四节)。
3.2 示例
示例 1:最简创建(使用系统默认字符集)
CREATE DATABASE db01;
示例 2:判断不存在再创建(推荐写法)
CREATE DATABASE IF NOT EXISTS db02;
示例 3:指定字符集与排序规则
CREATE DATABASE db03
DEFAULT CHARACTER SET utf8mb4
DEFAULT COLLATE utf8mb4_general_ci;
示例 4:验证是否创建成功
SHOW DATABASES LIKE 'db0%';
注意:CREATE DATABASE 只是建库,此时库是空的。要操作表,需要先切库:
USE db01;
之后执行的建表语句才会落到 db01 中。
四、字符集编码与校验(排序)规则
这是本节最容易被忽略、但踩坑最多的部分。
4.1 查看支持的字符集编码
SHOW CHARACTER SET;
结果中常用到的有:
| utf8 | MySQL 中的"阉割版" UTF-8,最多 3 字节,无法存储 emoji |
| utf8mb4 | 完整 UTF-8,最多 4 字节,推荐使用 |
| latin1 | 单字节编码,不支持中文,是 MySQL 早期版本的默认值 |
| gbk / gb2312 | 中文编码,兼容性差,不推荐新项目使用 |
4.2 查看支持的排序规则
SHOW COLLATION;
也可以只看某个字符集对应的排序规则:
SHOW COLLATION LIKE 'utf8mb4%';
常见的排序规则:
| utf8mb4_general_ci | 通用排序,ci = case insensitive(不区分大小写) |
| utf8mb4_bin | 按二进制比较,区分大小写和尾部空格 |
| utf8mb4_unicode_ci | 基于 Unicode 标准排序,多语言排序更准确 |
| utf8mb4_0900_ai_ci | MySQL 8.0 引入,基于 Unicode 9.0,性能与准确度更优 |
ci(case insensitive)不区分大小写;cs(case sensitive)与 bin 区分大小写。
4.3 不同字符集与排序规则的影响
字符集影响"能存什么":
— utf8 下插入 emoji 会报错或变成乱码
INSERT INTO t1 VALUES ('😀');
— ERROR 1366: Incorrect string value
— 改为 utf8mb4 后即可正常存储
排序规则影响"怎么比较和排序":
— general_ci:不区分大小写,结果中 'A' 和 'a' 视为相同
SELECT 'A' = 'a'; — 1
— bin:区分大小写
SELECT BINARY 'A' = 'a'; — 0
实际影响体现在:
4.4 查看系统默认字符集和排序规则
SHOW VARIABLES LIKE 'character_set_server';
SHOW VARIABLES LIKE 'collation_server';
也可以一条语句同时查看:
SHOW VARIABLES LIKE '%character_set%';
SHOW VARIABLES LIKE '%collation%';
层级关系(由大到小,后者可被前者继承):
服务器(server) → 数据库(database) → 表(table) → 列(column)
创建数据库时若不指定,就继承服务器级默认值;建表时若不指定,就继承数据库级默认值。
4.5 创建数据库时指定字符集和校验规则
CREATE DATABASE db04
DEFAULT CHARACTER SET utf8mb4
DEFAULT COLLATE utf8mb4_general_ci;
验证设置是否生效:
SHOW CREATE DATABASE db04;
最佳实践:新建数据库时始终显式指定 utf8mb4 与 utf8mb4_general_ci(或 8.0 环境下的 utf8mb4_0900_ai_ci),不要依赖默认值。否则在 latin1 默认值的旧版本 MySQL 上,插入中文会出现乱码。
五、查看创建语句
语法:
SHOW CREATE DATABASE 数据库名;
示例:
SHOW CREATE DATABASE db04;
输出示例:
CREATE DATABASE `db04` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci */
解读:
- 返回的是当初创建该库的完整 DDL 语句。
- /*!40100 … */ 是 MySQL 的版本条件注释:只有版本号大于等于 4.01.00 时,其中的语句才会被执行;低版本会把它当普通注释忽略。这样做的目的是保证脚本在不同版本间的兼容性。
- 该语句可以直接复制出来,用于在其他环境重建同名数据库。
六、修改数据库
语法:
ALTER DATABASE 数据库名
[DEFAULT] CHARACTER SET 字符集名
[DEFAULT] COLLATE 排序规则名;
示例:
ALTER DATABASE db01
DEFAULT CHARACTER SET utf8mb4
DEFAULT COLLATE utf8mb4_general_ci;
验证:
SHOW CREATE DATABASE db01;
重要提醒:
七、删除数据库
语法:
DROP DATABASE [IF EXISTS] 数据库名;
示例:
DROP DATABASE db02;
说明:
- IF EXISTS:可选。加上后,若库不存在则只产生一条 warning 而不报错;不加则抛出 ERROR 1008。
- 该操作不可回滚,会连同库中所有的表、数据、索引、视图、存储过程一并永久删除。
- 删除前建议先备份:
mysqldump -u root -p –databases db02 > db02_backup.sql
- 删除后当前会话若正处于该库中,需要重新 USE 到其他库,否则后续语句会报错。
八、小结与常见坑
| 查看库 | SHOW DATABASES; | 系统库不要删 |
| 创建库 | CREATE DATABASE IF NOT EXISTS 库名 …; | 不加 IF NOT EXISTS 重复执行会报错 |
| 切库 | USE 库名; | 忘记切库导致表建到了别的库 |
| 查看建库语句 | SHOW CREATE DATABASE 库名; | 注意版本条件注释 /*!40100 … */ |
| 修改库 | ALTER DATABASE 库名 …; | 不能改名;不影响已有表 |
| 删除库 | DROP DATABASE IF EXISTS 库名; | 不可回滚,先备份 |
三条铁律:


