MySQL数据库操作

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}:必须在多个选项中选择一个。
  • |:表示"或者"。
  • [内容]:表示该部分可以省略。
  • DATABASESCHEMA 在此处作用相同。
  • 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:大小写敏感
  • 删除数据库不可轻率执行
相关推荐
李燚9 小时前
LLM 可靠性设计:Retry + Failover 源码拆解(第58篇-E44)
数据库
乐橙开放平台9 小时前
养殖 SaaS 笔记:乐橙 IoT 物模型管环境,视频 OpenAPI 管回看
数据库·笔记·物联网·mysql·音视频
草莓熊Lotso9 小时前
【LangChain】输出解析器全解:让大模型输出从 “聊天” 变 “机器可读”
服务器·数据库·python·langchain·pip
GuWenyue10 小时前
放弃云端API!5套技术栈实战WebGPU端侧AI,前端独立跑本地大模型,省成本还保隐私
前端·数据库·人工智能
鸽芷咕11 小时前
MySQL/PostgreSQL 迁移金仓 KES:LEFT JOIN 丢数据排查与避坑指南
数据库·mysql·postgresql
2401_8414956421 小时前
【数据结构】B+树
数据结构·数据库·c++·b+树·概念·结构·操作原理
Hardworking6661 天前
第7章 软硬件系统集成
数据库·软硬件系统集成
名字还没想好☜1 天前
Go 的 time.Ticker 陷阱:定时任务里被忽略的内存泄漏与正确关闭
java·数据库·golang·go·定时器