MySQL 数据库(库)操作知识笔记
一、学习目标
学完本章后,应能够:
- 查看 MySQL 服务器中的数据库。
- 创建数据库,并设置字符集、排序规则和加密选项。
- 查看数据库的完整创建语句。
- 修改数据库的字符集、排序规则等属性。
- 安全地删除数据库。
- 理解字符集与排序规则对数据存储、比较和排序的影响。
二、数据库操作总览
| 操作 | SQL 语句 |
|---|---|
| 查看全部数据库 | SHOW DATABASES; |
| 创建数据库 | CREATE DATABASE 数据库名; |
| 查看创建语句 | SHOW CREATE DATABASE 数据库名; |
| 修改数据库 | ALTER DATABASE 数据库名 ...; |
| 删除数据库 | DROP DATABASE 数据库名; |
| 查看警告信息 | SHOW WARNINGS; |
| 查看支持的字符集 | SHOW CHARSET; |
| 查看支持的排序规则 | SHOW COLLATION; |
SQL 关键字通常不区分大小写,但建议统一使用大写关键字,提高可读性。
三、查看数据库
1. 基本语法
sql
SHOW DATABASES;
2. 易错点
DATABASES是复数形式。- 语句末尾不要遗漏分号
;。 - 删除数据库后,再执行该语句将无法看到已删除的数据库。
四、创建数据库
1. 完整语法结构
sql
CREATE {DATABASE | SCHEMA}
[IF NOT EXISTS] 数据库名
[DEFAULT] CHARACTER SET [=] 字符集名
[DEFAULT] COLLATE [=] 排序规则名
[DEFAULT] ENCRYPTION [=] {'Y' | 'N'};
2. 语法符号说明
{A | B}:必须在多个选项中选择一个。|:表示"或者"。[内容]:表示该部分可以省略。DATABASE与SCHEMA在此处作用相同。IF NOT EXISTS:数据库不存在时才创建,可避免因重名直接报错。
3. 创建普通数据库
sql
CREATE DATABASE test001;
数据库创建成功后,MySQL 会在数据目录中建立同名目录,用于保存该数据库中的数据。
4. 避免数据库重名报错
sql
CREATE DATABASE IF NOT EXISTS testdb;
当 testdb 已经存在时,再次执行不会重复创建,而是产生警告。可使用以下语句查看:
sql
SHOW WARNINGS;
5. 创建时指定字符集和排序规则
sql
CREATE DATABASE IF NOT EXISTS java01
CHARACTER SET utf8mb4
COLLATE utf8mb4_0900_ai_ci;
6. 创建时可设置的主要选项
| 选项 | 作用 |
|---|---|
CHARACTER SET |
指定数据库默认字符集 |
COLLATE |
指定字符比较和排序规则 |
ENCRYPTION |
指定是否启用数据库加密,Y 表示启用,N 表示不启用 |
ENCRYPTION 选项从 MySQL 8.0.16 开始支持。
五、字符集与排序规则
1. 字符集的作用
字符集决定字符如何编码和存储。数据库需要存储中文、英文、表情符号等内容时,通常优先选择 utf8mb4。
utf8mb4 是 Unicode 字符集的一种实现,每个字符使用 1~4 个字节,可以表示绝大多数语言字符和 Emoji。
查看 MySQL 支持的字符集
sql
SHOW CHARSET;
常见版本默认值
| MySQL 版本 | 常见默认字符集 |
|---|---|
| MySQL 8.0 | utf8mb4 |
| MySQL 5.7 | latin1 |
不同安装方式或配置文件可能改变默认值,实际环境应通过系统变量确认。
2. 排序规则的作用
排序规则决定字符串如何进行:
- 大小比较
- 排序
- 等值判断
- 大小写是否敏感
- 重音符号是否敏感
查看 MySQL 支持的排序规则
sql
SHOW COLLATION;
常见规则与版本差异
| 场景 | 常见排序规则 |
|---|---|
MySQL 8.0 的 utf8mb4 默认规则 |
utf8mb4_0900_ai_ci |
MySQL 5.7 中常用的 utf8mb4 规则 |
utf8mb4_general_ci |
utf8mb4_0900_ai_ci 是 MySQL 8.0 引入的规则,旧版本可能无法识别。服务器的实际默认值可能受安装方式和配置文件影响,应使用系统变量进行确认。
3. 排序规则名称拆解
以 utf8mb4_0900_ai_ci 为例:
| 部分 | 含义 |
|---|---|
utf8mb4 |
使用的字符集 |
0900 |
基于 Unicode Collation Algorithm 9.0.0 |
ai |
Accent-insensitive,重音不敏感 |
ci |
Case-insensitive,大小写不敏感 |
其他常见缩写:
| 缩写 | 英文 | 含义 |
|---|---|---|
ai |
Accent-insensitive | 重音不敏感 |
as |
Accent-sensitive | 重音敏感 |
ci |
Case-insensitive | 大小写不敏感 |
cs |
Case-sensitive | 大小写敏感 |
bin |
Binary | 按二进制值进行比较 |
记忆方法
i:insensitive,不敏感。s:sensitive,敏感。a:accent,重音。c:case,大小写。
例如:
ai_ci:重音不敏感、大小写不敏感。as_cs:重音敏感、大小写敏感。
六、查看系统默认字符集和排序规则
1. 查看字符集相关变量
sql
SHOW VARIABLES LIKE '%character%';
常见变量:
| 变量 | 作用 |
|---|---|
character_set_client |
客户端发送 SQL 时使用的字符集 |
character_set_connection |
连接层处理字符时使用的字符集 |
character_set_database |
当前数据库默认字符集 |
character_set_results |
服务器返回结果时使用的字符集 |
character_set_server |
MySQL 服务器默认字符集 |
character_set_system |
系统元数据使用的字符集 |
character_sets_dir |
字符集文件所在目录 |
2. 查看排序规则相关变量
sql
SHOW VARIABLES LIKE '%collation%';
常见变量:
| 变量 | 作用 |
|---|---|
collation_connection |
当前连接使用的排序规则 |
collation_database |
当前数据库默认排序规则 |
collation_server |
MySQL 服务器默认排序规则 |
default_collation_for_utf8mb4 |
utf8mb4 的默认排序规则 |
七、查看数据库的创建语句
1. 基本语法
sql
SHOW CREATE DATABASE 数据库名;
2. 示例
sql
SHOW CREATE DATABASE java01;
可能得到类似结果:
sql
CREATE DATABASE `java01`
DEFAULT CHARACTER SET utf8mb4
COLLATE utf8mb4_0900_ai_ci
DEFAULT ENCRYPTION='N';
3. 输出结果中的特殊内容
反引号
sql
`java01`
反引号用于包裹数据库名、表名、字段名等标识符,可避免名称与 SQL 关键字冲突。
版本条件语句
sql
/*!40100 DEFAULT CHARACTER SET utf8mb4 */
/*!80016 DEFAULT ENCRYPTION='N' */
这类内容不是普通注释,而是 MySQL 的版本条件语法:
/*!40100 ... */:MySQL 版本达到 4.1.0 时执行其中内容。/*!80016 ... */:MySQL 版本达到 8.0.16 时执行其中内容。
八、修改数据库
1. 完整语法结构
sql
ALTER {DATABASE | SCHEMA} [数据库名]
[DEFAULT] CHARACTER SET [=] 字符集名
[DEFAULT] COLLATE [=] 排序规则名
[DEFAULT] ENCRYPTION [=] {'Y' | 'N'}
READ ONLY [=] {DEFAULT | 0 | 1};
数据库修改操作主要用于调整:
- 默认字符集
- 默认排序规则
- 加密设置
- 只读属性
2. 修改字符集
sql
ALTER DATABASE test001 CHARACTER SET gbk;
修改后可检查结果:
sql
SHOW CREATE DATABASE test001;
3. 修改字符集和排序规则
sql
ALTER DATABASE test001
CHARACTER SET utf8mb4
COLLATE utf8mb4_0900_ai_ci;
4. 重要提醒
修改数据库的默认字符集,主要影响之后新建的对象,不等于自动转换已有表和已有字段的数据。处理已有数据时,还需检查并修改表级、列级字符集,并提前备份。
九、删除数据库
1. 基本语法
sql
DROP {DATABASE | SCHEMA} [IF EXISTS] 数据库名;
2. 示例
sql
DROP DATABASE testdb;
更稳妥的写法:
sql
DROP DATABASE IF EXISTS testdb;
3. 删除后的结果
- 数据库会从数据库列表中消失。
- 数据库对应的数据目录会被删除。
- 目录中的表和数据文件会一并删除。
DROP DATABASE是高风险操作。执行前必须确认数据库名,并做好备份。生产环境中应严格控制删除权限。
十、核心命令速记
sql
-- 查看全部数据库
SHOW DATABASES;
-- 创建数据库
CREATE DATABASE db_name;
-- 数据库不存在时创建
CREATE DATABASE IF NOT EXISTS db_name;
-- 指定字符集和排序规则
CREATE DATABASE IF NOT EXISTS db_name
CHARACTER SET utf8mb4
COLLATE utf8mb4_0900_ai_ci;
-- 查看警告
SHOW WARNINGS;
-- 查看支持的字符集
SHOW CHARSET;
-- 查看支持的排序规则
SHOW COLLATION;
-- 查看系统字符集变量
SHOW VARIABLES LIKE '%character%';
-- 查看系统排序规则变量
SHOW VARIABLES LIKE '%collation%';
-- 查看数据库创建语句
SHOW CREATE DATABASE db_name;
-- 修改数据库字符集
ALTER DATABASE db_name CHARACTER SET utf8mb4;
-- 修改字符集和排序规则
ALTER DATABASE db_name
CHARACTER SET utf8mb4
COLLATE utf8mb4_0900_ai_ci;
-- 删除数据库
DROP DATABASE db_name;
-- 数据库存在时删除
DROP DATABASE IF EXISTS db_name;
十一、知识速记
- 查库:
SHOW DATABASES; - 建库:
CREATE DATABASE ...; - 防止重名:
IF NOT EXISTS - 查建库语句:
SHOW CREATE DATABASE ...; - 改库:
ALTER DATABASE ...; - 删库:
DROP DATABASE ...; - 防止删除不存在的库:
IF EXISTS - 查字符集:
SHOW CHARSET; - 查排序规则:
SHOW COLLATION; - 推荐字符集:
utf8mb4 - MySQL 8.0 常见排序规则:
utf8mb4_0900_ai_ci ci:大小写不敏感cs:大小写敏感- 删除数据库不可轻率执行