本系列可作为数据库学习系列的笔记,文中提到的一些练习的代码,小编会将代码复制下来,大家复制下来就可以练习了,方便大家学习。
点赞关注不迷路!您的点赞、关注和收藏是对小编最大的支持和鼓励!
系列文章目录
目录
目录
[2.1 核心语法](#2.1 核心语法)
[2.2 关键语法细节](#2.2 关键语法细节)
[2.3 实操示例](#2.3 实操示例)
[3.1 完整官方语法](#3.1 完整官方语法)
[3.2 语法符号专属含义解析](#3.2 语法符号专属含义解析)
[3.3 核心关键字说明](#3.3 核心关键字说明)
[3.4 不同场景的建库实操示例](#3.4 不同场景的建库实操示例)
[3.4.1 场景 1:基础建库 ------ 直接创建指定名称的数据库](#3.4.1 场景 1:基础建库 —— 直接创建指定名称的数据库)
[3.4.2 场景 2:安全建库 ------ 判断不存在则创建(开发推荐)](#3.4.2 场景 2:安全建库 —— 判断不存在则创建(开发推荐))
[3.4.3 场景 3:查看建库警告信息 ------ 定位重复建库问题](#3.4.3 场景 3:查看建库警告信息 —— 定位重复建库问题)
[3.4.4 场景 4:自定义配置建库 ------ 指定字符集 + 排序规则(生产必备)](#3.4.4 场景 4:自定义配置建库 —— 指定字符集 + 排序规则(生产必备))
[3.4.5 场景 5:高级配置建库 ------ 指定加密属性(MySQL8.0.16+)](#3.4.5 场景 5:高级配置建库 —— 指定加密属性(MySQL8.0.16+))
[四、字符集编码与排序规则:数据库的 "语言基础"](#四、字符集编码与排序规则:数据库的 “语言基础”)
[4.1 核心关联关系](#4.1 核心关联关系)
[4.2 查看 MySQL 支持的字符集和排序规则](#4.2 查看 MySQL 支持的字符集和排序规则)
[4.2.1 查看所有支持的字符集](#4.2.1 查看所有支持的字符集)
[4.2.2 查看所有支持的排序规则](#4.2.2 查看所有支持的排序规则)
[4.3 排序规则命名规范与关键字解析](#4.3 排序规则命名规范与关键字解析)
[4.4 查看 MySQL 系统级默认字符集和排序规则](#4.4 查看 MySQL 系统级默认字符集和排序规则)
[4.4.1 查看系统所有字符集相关变量](#4.4.1 查看系统所有字符集相关变量)
[4.4.2 查看系统所有排序规则相关变量](#4.4.2 查看系统所有排序规则相关变量)
[5.1 核心语法](#5.1 核心语法)
[5.2 实操示例:查看 java01 库的创建语句](#5.2 实操示例:查看 java01 库的创建语句)
[5.3 创建语句深度解析(新手必看)](#5.3 创建语句深度解析(新手必看))
[5.4 拓展用法:查看系统默认库的创建语句](#5.4 拓展用法:查看系统默认库的创建语句)
[6.1 完整官方语法](#6.1 完整官方语法)
[6.2 语法关键细节](#6.2 语法关键细节)
[6.3 不同场景的修改实操示例](#6.3 不同场景的修改实操示例)
[6.3.1 场景 1:基础修改 ------ 仅修改数据库的字符集](#6.3.1 场景 1:基础修改 —— 仅修改数据库的字符集)
[6.3.2 场景 2:进阶修改 ------ 同时修改字符集和排序规则](#6.3.2 场景 2:进阶修改 —— 同时修改字符集和排序规则)
[6.3.3 场景 3:高级修改 ------ 设置数据库为只读状态](#6.3.3 场景 3:高级修改 —— 设置数据库为只读状态)
[6.3.4 场景 4:高级修改 ------ 修改数据库加密属性(8.0.16+)](#6.3.4 场景 4:高级修改 —— 修改数据库加密属性(8.0.16+))
[7.1 核心语法](#7.1 核心语法)
[7.2 语法关键细节](#7.2 语法关键细节)
[7.3 实操示例](#7.3 实操示例)
[7.3.1 安全删除:判断存在则删除(唯一推荐写法)](#7.3.1 安全删除:判断存在则删除(唯一推荐写法))
[7.3.2 验证删除结果](#7.3.2 验证删除结果)
[7.4 删库操作的核心避坑原则(必看)](#7.4 删库操作的核心避坑原则(必看))
[7.4.1 开发 / 测试环境避坑](#7.4.1 开发 / 测试环境避坑)
[7.4.2 生产环境严令禁止](#7.4.2 生产环境严令禁止)
[八、MySQL 库操作核心总结:语法 + 规范 + 避坑](#八、MySQL 库操作核心总结:语法 + 规范 + 避坑)
[8.1 四大核心操作完整语法速查表(含推荐写法)](#8.1 四大核心操作完整语法速查表(含推荐写法))
[8.2 字符集与排序规则核心规范(从根源避坑)](#8.2 字符集与排序规则核心规范(从根源避坑))
[8.3 库操作通用开发规范(团队协作必备)](#8.3 库操作通用开发规范(团队协作必备))
前言
小编作为新晋码农一枚,会定期整理一些写的比较好的代码,作为自己的学习笔记,会试着做一下批注和补充,如转载或者参考他人文献会标明出处,非商用,如有侵权会删改!欢迎大家斧正和讨论!
在上一篇数据库基础内容中,我们搭建了 MySQL 的基础认知体系,包括安装配置、架构原理和 SQL 基础分类。本次内容将聚焦 MySQL数据库(库) 的全流程操作,从基础的查看、创建,到进阶的字符集与排序规则配置,再到修改、删除的实操细节,进行逐点拆解、深度讲解。掌握库的操作是 MySQL 实操的入门关键,也是后续表、数据操作的基础,同时正确的字符集配置能从根源避免数据乱码问题,让数据库设计更规范、更健壮。
一、本节核心学习目标
- 精通 MySQL 数据库创建、查看、修改、删除四大核心操作的完整语法、常用写法及避坑要点
- 深度理解字符集编码与排序规则的本质含义、关联关系及 MySQL 版本差异
- 学会在创建 / 修改数据库时精准指定字符集和排序规则,打造适配业务的数据库基础配置
- 掌握库操作的实操规范和高危操作的避坑技巧,适配开发、测试、生产多环境需求
二、查看数据库:快速知晓服务器中已存在的库
查看数据库是最基础的入门操作,用于查询当前 MySQL 服务器中所有已创建的数据库,包括系统默认库和自定义库,语法简单且支持大小写不敏感,是日常操作的高频指令。
2.1 核心语法
sql
show databases;
show是一个关键字 表示的是要执行的操作类型,作用显示某些信息。
要加分号!
如果第一行没有写分号,按回车之后会另起一行,继续去写未完成的SQL,直到遇见分号为止。
如果写了很多的SQL 中途发现写错了,想要重新开始养,可以使用ctrl+C
2.2 关键语法细节
- 复数形式要求 :关键字必须是databases (复数),若写成
show database;会直接报语法错误,这是新手最易踩的坑 - 大小写无关 :MySQL 关键字不区分大小写,
SHOW DATABASES;、show databases;、Show Databases;执行结果一致 - 执行结果说明 :执行后会返回一个表格,包含所有数据库名称,其中
mysql、sys、performance_schema、information_schema是 MySQL 的系统默认库,分别用于存储权限信息、系统配置、性能监控、数据库元数据,切勿随意修改或删除。
2.3 实操示例

这四个是系统级别的库(自带的),记录mysql自身的一些配置,性能,系统变量信息 如果不明白他的具体作用,千万不要改动,更不能删除,如果改错了,或者删除了,MYSQL无法启动。
如果没有备份的情况下,只能重新安装数据库服务了。
每次使用数据库时,只使用自己创建的数据库,别的不管是啥名字都不要动。
使用 \? 获取帮助和指导

上述结果为 MySQL 全新安装后的默认库列表,后续自定义创建的库会新增到该列表中。
三、创建数据库:灵活配置,安全建库
创建数据库是开发中最常用的操作,MySQL 提供了灵活且安全 的创建语法,支持判断数据库是否存在 、指定字符集 / 排序规则 、设置数据库加密等多种配置项,既满足基础建库需求,也能适配复杂的业务场景,同时避免重复建库、关键字冲突等问题。
3.1 完整官方语法
sql
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [create_option] ...
# 可选配置项(create_option)详细语法
create_option: [DEFAULT] {
CHARACTER SET [=] charset_name # 指定数据库字符集编码
| COLLATE [=] collation_name # 指定数据库字符集的排序/校验规则
| ENCRYPTION [=] {'Y' | 'N'} # 数据库是否加密,MySQL 8.0.16版本新增特性
}
1. 大括号表示必须要有这个关键字,里面的 | 是 或的意思,也就是说database和schema必须写一个,他们都表示数据库的意思。
2. 中括号表示可有可无,也就是说是可选项,当前这里写的if not exists表示如果不存在则创建数据库
3. db_name : 用户自定义内容,这里就是数据库的名字。
4. MYSQL允许开发者使用关键字命名,但是在使用是要用反引号把关键字引起来,反引号在键盘中的位置,ESC下边,TAB上边,1的左边,要用英文符号。

5. 这些规则在MYSQL文档中都是通用的,在编程界大多数的语法描述也是这套规则。
Test:
创建一个名字为java113的数据库(大小写不敏感,选择哪个都可以)
sql
#1.先看一下当前有没有要创建的数据库 show databases;
#2.根据语法规则创建一个名字为java113的数据库。
create database if not exists java113;
CREATE DATABASE IF NOT EXISTS java113;
#3.检查是否创建成功 show databases;
3.1.1 实操示例

sql
Query OK, 1 row affected (0.08 sec)
#Query OK 执行结果
#1 row affected 受影响的行数,对于成功创建一个数据库返回就是一条成功记录(信息)
#0.08 sec 执行时间 意义不大
如果数据库已经存在,会提示报错。可以使用 show warnings; 查看报错!

如果不加if not exists 直接报错!

在真实的工作中,执行SQL语句,不是手动一条一条执行的,而是批量一起执行,为了不想某一条语句的错误影响整个执行流程,都会加上一些类似于if not exists 的校验,防止因为某条SQL出错导致整个SQL中断执行。
sql
# 可选配置项(create_option)详细语法
create_option: [DEFAULT] {
CHARACTER SET [=] charset_name # 指定数据库字符集编码
| COLLATE [=] collation_name # 指定数据库字符集的排序/校验规则
| ENCRYPTION [=] {'Y' | 'N'} # 数据库是否加密,MySQL 8.0.16版本新增特性
}
#CHARACTER SET [=] charset_name # 指定数据库字符集编码
#
#8.0中默认的字符集是utf8mb4
#5.7中默认的字符集是latin1 :不能存储中文
#创建数据库的时候强烈建议大家手动明确认定字符集
#COLLATE [=] collation_name # 指定数据库字符集的排序/校验规则
#
#8.0中默认是utf8mb4_0900_ai_ci : 从8.0开始才支持 ai 口音不敏感 ci 大小写不敏感
#5.7中默认是utf8mb4_general_ci
TEST: 创建一个名为test_db01的数据库,并指定字符集和排序规则
sql
create database if not exists test_db03 character set utf8mb4 collate utf8mb4_0900_ai_ci;

查看当前数据库服务全局的默认字符集

3.2 语法符号专属含义解析
MySQL 语法中的特殊符号有固定且严格的含义,准确理解这些符号是读懂、写对 MySQL 语句的基础,本语法中涉及的符号如下:
sql
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [create_option] ...
# 可选配置项(create_option)详细语法
create_option: [DEFAULT] {
CHARACTER SET [=] charset_name # 指定数据库字符集编码
| COLLATE [=] collation_name # 指定数据库字符集的排序/校验规则
| ENCRYPTION [=] {'Y' | 'N'} # 数据库是否加密,MySQL 8.0.16版本新增特性
}
| 符号 | 含义 | 示例 |
|---|---|---|
{} |
大括号内为必选内容,需从中选择其一 | {DATABAS | ESCHEMA}:必须选 DATABASE 或 SCHEMA |
| | | 竖线表示多选一,即符号前后的内容只能选一个 | {DATABAS | ESCHEMA} :必须选 DATABASE 或 SCHEMA |
[] |
中括号内为可选项,根据业务需求选择添加,不添加则使用默认值 | [IF NOT EXISTS]:可选加,用于判断库是否存在 |
... |
省略号表示可重复添加多个同类型配置项 | 可同时指定 CHARACTER SET 和 COLLATE |
[=] |
等号可选,写或不写均不影响执行结果 | CHARACTER SET utf8mb4与CHARACTER SET = utf8mb4一致 |
3.3 核心关键字说明
- DATABASE / SCHEMA :二者含义完全一致,均可表示 "数据库",
CREATE DATABASE是通用写法,CREATE SCHEMA为兼容其他数据库的写法,日常开发使用DATABASE即可 - IF NOT EXISTS :建库前先判断指定名称的数据库是否存在,存在则不执行创建操作,不存在则创建 ,是开发中必加的安全配置,避免重复建库报错
- db_name :自定义数据库名,命名需遵循 MySQL 规范:由字母、数字、下划线组成,不能以数字开头,避免使用 MySQL 关键字(如 database、table、user),建议使用小写字母 + 下划线的命名方式(如 bit_mall、java01_test)
3.4 不同场景的建库实操示例
根据业务需求的不同,创建数据库分为基础建库 、安全建库 、自定义配置建库三种场景,以下逐一讲解并附执行结果解析。
3.4.1 场景 1:基础建库 ------ 直接创建指定名称的数据库
语法 :create database 数据库名;
实操:创建名为 test001 的数据库
sql
mysql> create database test001;
Query OK, 1 row affected (0.01 sec)
结果解析 :Query OK表示执行成功,1 row affected表示影响行数,0.01 sec表示执行耗时。
底层变化 :数据库创建成功后,MySQL 会在数据存储目录下自动生成一个与数据库同名的文件夹,该文件夹用于保存该数据库中所有的表、数据、索引等相关文件。
3.4.2 场景 2:安全建库 ------ 判断不存在则创建(开发推荐)
语法 :create database if not exists 数据库名;
实操:创建名为 testdb 的数据库,若已存在则不执行
sql
# 首次执行(testdb不存在)
mysql> create database if not exists testdb;
Query OK, 1 row affected (0.01 sec)
# 重复执行(testdb已存在)
mysql> create database if not exists testdb;
Query OK, 1 row affected, 1 warning (0.01 sec)
结果解析 :重复执行后出现1 warning(警告),而非报错,这是IF NOT EXISTS的核心作用 ------容错性建库,避免程序中重复执行建库语句导致服务异常。
3.4.3 场景 3:查看建库警告信息 ------ 定位重复建库问题
重复执行安全建库语句出现警告后,可通过show warnings;语句查看具体警告原因,快速定位问题。
实操:
sql
mysql> show warnings;
+-------+------+-----------------------------------------------+
| Level | Code | Message |
+-------+------+-----------------------------------------------+
| Note | 1007 | Can't create database 'testdb'; database exists |
+-------+------+-----------------------------------------------+
1 row in set (0.00 sec)
结果解析 :警告级别为Note(提示),错误码 1007,明确提示 "无法创建数据库 testdb,该数据库已存在",无实际错误,仅做信息提示。
3.4.4 场景 4:自定义配置建库 ------ 指定字符集 + 排序规则(生产必备)
这是生产环境的标准建库写法,在安全建库的基础上,手动指定字符集和排序规则,避免因系统默认配置差异导致数据乱码,后续所有表会默认继承该库的配置。
语法 :create database if not exists 数据库名 character set 字符集 collate 排序规则;
实操:创建名为 java01 的数据库,指定字符集为 utf8mb4,排序规则为 utf8mb4_0900_ai_ci
sql
mysql> create database if not exists java01 character set utf8mb4 collate utf8mb4_0900_ai_ci;
Query OK, 1 row affected (0.02 sec)
核心意义:统一数据库的字符编码和排序规则,从根源解决中文乱码、字符排序异常等问题,是企业开发的通用规范。
3.4.5 场景 5:高级配置建库 ------ 指定加密属性(MySQL8.0.16+)
MySQL8.0.16 及以上版本支持数据库加密,通过ENCRYPTION='Y'/'N'指定,Y表示加密,N表示不加密(默认值)。
实操:创建加密的数据库 encrypt_db
sql
mysql> create database if not exists encrypt_db character set utf8mb4 encryption='Y';
Query OK, 1 row affected (0.03 sec)
注意 :数据库加密需依赖 MySQL 的加密插件,若未配置插件,执行该语句会报错,日常开发若无特殊加密需求,使用默认值N即可。
四、字符集编码与排序规则:数据库的 "语言基础"
字符集编码(Character Set)决定了 MySQL如何存储字符数据 (如中文、英文、emoji),排序规则(Collation)决定了 MySQL如何比较、排序、匹配字符数据(如判断 A 和 a 是否相同、中文按什么规则排序),二者是数据库的 "语言基础",紧密关联、缺一不可,也是新手最易忽略且最易踩坑的知识点。
4.1 核心关联关系
- 一一对应:每一个字符集都对应一套专属的排序规则,一个排序规则只能属于一个字符集
- 继承性 :数据库的字符集和排序规则会被表继承 ,表的配置又会被字段继承,即 "库→表→字段" 的继承链
- 默认性:若创建库 / 表 / 字段时未手动指定,会自动使用上一级的默认配置(如库使用服务器默认,表使用库默认)
4.2 查看 MySQL 支持的字符集和排序规则
MySQL 支持数十种字符集和上百种排序规则,可通过专用语句查看所有支持的配置,同时快速定位默认配置。
4.2.1 查看所有支持的字符集
语法 :show charset;(或show character set;,二者等价)
核心作用:查看 MySQL 支持的所有字符集,包括字符集描述、默认排序规则、最大字符长度。
关键默认值:
- MySQL8.0默认字符集 :
utf8mb4(推荐使用,兼容所有 Unicode 字符) - MySQL5.7默认字符集 :
latin1(不支持中文,需手动修改,这是 5.7 版本中文乱码的核心原因)
utf8 与 utf8mb4 的核心区别:
utf8:MySQL 中的伪 utf8,最多使用 3 个字节存储字符,不支持 emoji 表情,也不支持部分生僻汉字utf8mb4:真正的 UTF-8 编码,最多使用 4 个字节存储字符,支持所有中文、emoji 表情、生僻汉字 ,是 MySQL8.0 的默认值,也是开发首选字符集
4.2.2 查看所有支持的排序规则
语法 :show collation;
核心作用:查看 MySQL 支持的所有排序规则,包括对应的字符集、是否区分大小写 / 重音。
关键默认值:
- MySQL8.0默认排序规则 :
utf8mb4_0900_ai_ci(适配 utf8mb4 字符集) - MySQL5.7默认排序规则 :
utf8mb4_general_ci(适配 utf8mb4 字符集)
4.3 排序规则命名规范与关键字解析
MySQL 的排序规则命名有统一的规范 ,通过名称即可快速判断其核心特性,以主流的utf8mb4_0900_ai_ci为例,各部分含义如下,这是理解排序规则的关键:
sql
utf8mb4_0900_ai_ci
├─ utf8mb4:对应的字符集,排序规则与字符集绑定
├─ 0900:基于UCA 9.0.0算法(UCA=Unicode Collation Algorithm,Unicode官方排序算法),算法版本越高,排序规则越精准
├─ ai:Accent-insensitive,**重音不敏感**(如a、á、à视为同一个字符,不区分重音)
└─ ci:Case-insensitive,**大小写不敏感**(如A、a视为同一个字符,不区分大小写)
除了ai和ci,排序规则中还有其他常用关键字,对应不同的匹配规则:
| 关键字 | 英文全称 | 含义 | 适用场景 |
|---|---|---|---|
as |
Accent-sensitive | 重音敏感 | 需严格区分重音的场景(如欧美多语言业务) |
cs |
Case-sensitive | 大小写敏感 | 需严格区分大小写的场景(如用户账号、密码存储) |
bin |
Binary | 二进制排序 | 按字符的 ASCII 码值比较,大小写 / 重音均敏感,排序最精准 |
示例 :utf8mb4_0900_cs_as表示:适配 utf8mb4 字符集、基于 UCA9.0.0 算法、大小写敏感、重音敏感的排序规则。
4.4 查看 MySQL 系统级默认字符集和排序规则
可通过show variables like语句查询服务器级、数据库级 的默认字符集和排序规则,确认全局配置,避免因配置不一致导致问题。该语句使用通配符 % 匹配相关变量,是 MySQL 查询系统变量的高频用法。
4.4.1 查看系统所有字符集相关变量
语法 :show variables like '%character%';
实操结果与解析:
sql
mysql> show variables like '%character%';
+--------------------------+-------------------------------------------+
| Variable_name | Value |
+--------------------------+-------------------------------------------+
| character_set_client | utf8mb4 | -- 客户端发送数据的字符集
| character_set_connection | utf8mb4 | -- 连接层的字符集
| character_set_database | utf8mb4 | -- 数据库默认字符集
| character_set_filesystem | binary | -- 文件系统的字符集,固定为binary
| character_set_results | utf8mb4 | -- 服务器返回结果的字符集
| character_set_server | utf8mb4 | -- 服务器默认字符集
| character_set_system | utf8mb3 | -- 系统元数据的字符集,固定为utf8mb3
| character_sets_dir | D:\Program Files\MySQL\Server 8.0\charsets\ | -- 字符集文件存储目录
+--------------------------+-------------------------------------------+
8 rows in set, 1 warning (0.00 sec)
核心关注 :character_set_database(数据库默认)和character_set_server(服务器默认),MySQL8.0 中二者均为utf8mb4,MySQL5.7 中二者默认为latin1,需手动修改。
4.4.2 查看系统所有排序规则相关变量
语法 :show variables like '%collation%';
实操结果与解析:
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 | -- 服务器默认排序规则
| default_collation_for_utf8mb4 | utf8mb4_0900_ai_ci | -- utf8mb4的默认排序规则
+----------------------+--------------------+
4 rows in set, 1 warning (0.00 sec)
核心关注 :collation_database和collation_server,MySQL8.0 中二者均为utf8mb4_0900_ai_ci,是开发中最通用的排序规则,满足 99% 的业务需求。
五、查看数据库创建语句:溯源库的完整配置
创建数据库后,可通过show create database语句查看该数据库的完整创建语句 ,包括系统自动补充的默认配置(如加密、注释),核心作用是验证库的配置是否符合预期 、复刻数据库配置 、排查配置相关问题,是日常操作的高频指令。
5.1 核心语法
sql
show create database 数据库名;
5.2 实操示例:查看 java01 库的创建语句
sql
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' */ |
+----------+---------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)
5.3 创建语句深度解析(新手必看)
上述结果中的创建语句包含多个易混淆的细节,并非简单的手动输入语句,而是 MySQL 补充后的完整语句,逐一解析如下:
- 数据库名的反引号 `` :将数据库名包裹在反引号中,是 MySQL 的规范写法 ,核心作用是避免数据库名与 MySQL 关键字冲突 。例如若数据库名是
table(MySQL 关键字),不加反引号会报错,加反引号则可正常识别。 - /*!40100 ... */ :这不是注释 ,而是 MySQL 的版本条件执行语法 ,含义是:当当前 MySQL 服务器的版本大于等于 4.01.00 时,执行该语句内的内容;若版本低于 4.01.00,则忽略该内容。作用是提升语句的版本兼容性。
- /*!80016 DEFAULT ENCRYPTION='N' */ :同理,版本条件执行语法,含义是:当当前 MySQL 版本大于等于 8.0.16 时,设置数据库默认加密属性为 N(不加密);若版本低于 8.0.16,因不支持加密特性,直接忽略该内容。
- DEFAULT :默认关键字,可省略,
DEFAULT CHARACTER SET utf8mb4与CHARACTER SET utf8mb4执行结果一致,MySQL 自动补充该关键字让语句更规范。
5.4 拓展用法:查看系统默认库的创建语句
通过该语句也可查看 MySQL 系统默认库的配置,了解系统库的字符集和排序规则,例如查看 mysql 库:
sql
show create database mysql;
注意:系统默认库的配置请勿随意修改,否则可能导致 MySQL 服务异常。
六、修改数据库:仅改配置,不改数据
MySQL 中对数据库的修改操作仅针对配置项 ,无法修改数据库名称,核心可修改的配置包括:字符集编码、排序规则、加密属性、只读属性,其中修改字符集和排序规则是开发中最常用的操作,修改后仅对后续新建的表生效,已存在的表不会自动继承新配置。
6.1 完整官方语法
sql
ALTER {DATABASE | SCHEMA} [db_name] alter_option ...
# 可选修改配置项(alter_option)详细语法
alter_option: {
[DEFAULT] CHARACTER SET [=] charset_name # 修改数据库默认字符集
| [DEFAULT] COLLATE [=] collation_name # 修改数据库默认排序规则
| [DEFAULT] ENCRYPTION [=] {'Y' | 'N'} # 修改数据库加密属性(8.0.16+)
| READ ONLY [=] {DEFAULT | 0 | 1} # 设置数据库只读属性,1=只读,0=可读写
}
6.2 语法关键细节
- db_name 的可选性 :若当前已通过
use 数据库名;切换到目标数据库,可省略db_name,直接写ALTER DATABASE alter_option ...;若未切换数据库,必须指定db_name,否则会修改当前默认数据库的配置 - 修改范围限制 :仅能修改数据库的全局配置项,无法修改数据库名称,若需修改库名,只能通过 "新建库 + 迁移数据 + 删除旧库" 的方式实现
- 生效范围 :修改后的配置仅对后续新建的表 / 字段生效,已存在的表 / 字段仍使用修改前的配置,需单独修改表 / 字段的配置才能同步更新
补:选择要操作的数据库
use 数据库名[;] 切换(选择)数据库成功
select database(); 查看当前选择(操作)的是哪个数据库

6.3 不同场景的修改实操示例
6.3.1 场景 1:基础修改 ------ 仅修改数据库的字符集
实操 :将 test001 库的字符集从默认的 utf8mb4 修改为 gbk
sql
# 未切换数据库,指定库名修改
mysql> alter database test001 character set gbk;
Query OK, 1 row affected (0.01 sec)
# 验证修改结果
mysql> show create database test001;
+----------+-------------------------------------------------------------------------------------------------+
| Database | Create Database |
+----------+-------------------------------------------------------------------------------------------------+
| test001 | CREATE DATABASE `test001` /*!40100 DEFAULT CHARACTER SET gbk */ /*!80016 DEFAULT ENCRYPTION='N' */ |
+----------+-------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
结果解析 :DEFAULT CHARACTER SET已从 utf8mb4 变为 gbk,修改成功。
6.3.2 场景 2:进阶修改 ------ 同时修改字符集和排序规则
实操:将 test001 库的字符集改回 utf8mb4,排序规则改为 utf8mb4_0900_ai_ci(推荐配置)
sql
# 先切换到test001库,再修改,省略库名
mysql> use test001;
Database changed
mysql> alter database character set utf8mb4 collate utf8mb4_0900_ai_ci;
Query OK, 1 row affected (0.01 sec)
# 验证修改结果
mysql> show create database test001;
+----------+---------------------------------------------------------------------------------------------------------------------------------+
| Database | Create Database |
+----------+---------------------------------------------------------------------------------------------------------------------------------+
| test001 | CREATE DATABASE `test001` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */ |
+----------+---------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
关键操作 :use 数据库名;是切换当前数据库的核心语句,执行后后续的操作若不指定库名,均针对当前数据库,简化语句书写。
6.3.3 场景 3:高级修改 ------ 设置数据库为只读状态
实操:将 java01 库设置为只读状态(1 = 只读,0 = 可读写)
sql
mysql> alter database java01 read only=1;
Query OK, 1 row affected (0.02 sec)
核心作用 :适用于生产环境的数据备份、容灾 场景,设置为只读后,该数据库仅能执行查询操作(select),无法执行创建表、插入 / 修改 / 删除数据、删除表等写操作,避免数据被误修改。还原可读写 :alter database java01 read only=0;
6.3.4 场景 4:高级修改 ------ 修改数据库加密属性(8.0.16+)
实操:将 encrypt_db 库的加密属性从 Y 改为 N
sql
mysql> alter database encrypt_db encryption='N';
Query OK, 1 row affected (0.03 sec)
注意:修改加密属性需 MySQL 服务端已配置加密插件,且数据库无正在执行的操作,否则会报错。
七、删除数据库:高危操作,谨慎执行
删除数据库是 MySQL 中最高危的操作之一 ,执行后会永久删除 该数据库对应的所有内容:包括数据库中的所有表、数据、索引、视图等,同时数据库对应的文件夹也会被删除,无回收站,无法恢复,开发中需严格控制,生产环境更是严禁随意执行。
使用之前慎之又慎,如果公司中有这样的需求,一定要把你的领导,同事叫过来,一起来干这个事!
数据库中的数据对公司来说非常重要,也是公司的核心资产,大家操作数据库的时候一定要有敬畏心。
在服务器(一般都是linux系统),上删除并没有回收站这么一说,删了就没有了,但是在磁盘上删除文件,并不是真正意义上什么都没有了。
7.1 核心语法
sql
DROP {DATABASE | SCHEMA} [IF EXISTS] db_name;
7.2 语法关键细节
- IF EXISTS :必加的安全配置,删除前先判断数据库是否存在,存在则删除,不存在则不执行且不报错,避免删除不存在的数据库导致程序异常
- 权限要求 :仅拥有 MySQL超级管理员权限的用户(如 root)才能执行删除数据库操作,普通用户无此权限,这是 MySQL 的安全机制
- 不可逆性 :删除操作是物理删除,并非逻辑删除,数据一旦删除无法恢复,无任何挽回余地
7.3 实操示例
7.3.1 安全删除:判断存在则删除(唯一推荐写法)
实操:删除 testdb 数据库
sql
mysql> drop database if exists testdb;
Query OK, 0 rows affected (0.04 sec)

结果解析 :0 rows affected表示该数据库中无表 / 数据,若数据库中有表,会显示受影响的行数,代表删除的表数量。
7.3.2 验证删除结果
删除后通过show databases;语句验证,目标数据库会从列表中消失,确认删除成功:
sql
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| java01 |
| mysql |
| performance_schema |
| sys |
| test001 |
+--------------------+
6 rows in set (0.00 sec)
结果:testdb 已从列表中消失,删除成功。
7.4 删库操作的核心避坑原则(必看)
7.4.1 开发 / 测试环境避坑
- 执行删库语句前,务必再次确认数据库名,避免删错库(如将 test001 写成 test002)
- 重要测试数据在删库前先做备份 ,可通过
mysqldump工具导出数据,防止数据丢失 - 尽量在非工作时间执行删库操作,避免影响团队开发
- MYSQL在执行的过程中只要第数据库进行修改操作,都会把这些操作内容记录到日志中,如果误删了数据库,就可以通过日志,快速的把日志中记录的所有操作再执行一遍,完成恢复。
- 数据库定期备份,每天备份一份(增量备份,记录的是今天比昨天新增的数据),每周备份一次,全量备份。
- 在公司的生产环境中,一般都是以集群形式部署的,如果只删除了其中一台机器,其他机器中的日志还是可以用的。
- 电力供应都是和当地的电厂直接挂钩的,机房的备电源UPS,足以支持机房运行15M-30M.机房外还有自备的发电机,机房下还有一个非常大的油库。
7.4.2 生产环境严令禁止
- 严禁直接执行
drop database语句,生产环境的数据库若需下线,需走正规的审批流程 - 生产环境开启数据库备份机制(全量备份 + 增量备份),即使误删也能通过备份恢复数据
- 限制生产环境 MySQL 的 root 账号权限,仅少数管理员拥有,避免账号泄露导致误删库
- 开启 MySQL 的慢查询日志、操作日志,记录所有数据库操作,便于误操作后溯源
八、MySQL 库操作核心总结:语法 + 规范 + 避坑
8.1 四大核心操作完整语法速查表(含推荐写法)
| 操作类型 | 基础语法 | 开发推荐写法(安全 / 规范) | 适用场景 |
|---|---|---|---|
| 查看数据库 | show databases; |
show databases; |
快速查询所有库 |
| 创建数据库 | create database 库名; |
create database if not exists 库名 character set utf8mb4 collate utf8mb4_0900_ai_ci; |
所有开发 / 生产场景,基础建库规范 |
| 查看创建语句 | show create database 库名; |
show create database 库名; |
验证库配置、复刻库、排查问题 |
| 修改数据库 | alter database 库名 配置项; |
use 库名; alter database character set 字符集 collate 排序规则; |
修改库的字符集 / 排序规则 / 只读属性 |
| 删除数据库 | drop database 库名; |
drop database if exists 库名;(仅测试 / 开发环境) |
测试环境清理无用库,生产环境严禁 |
8.2 字符集与排序规则核心规范(从根源避坑)
- 开发首选 :字符集用
utf8mb4,排序规则用utf8mb4_0900_ai_ci,满足 99% 的业务需求,支持中文、emoji,避免乱码 - 版本适配:MySQL5.7 需手动将服务器 / 数据库默认字符集从 latin1 改为 utf8mb4,否则会出现中文乱码
- 统一配置 :创建数据库时必须手动指定字符集和排序规则,不依赖系统默认配置,保证团队开发配置一致
- 生效规则 :库的配置仅对后续新建表生效,已存在的表需单独修改,执行
alter table 表名 character set utf8mb4 collate utf8mb4_0900_ai_ci;
8.3 库操作通用开发规范(团队协作必备)
- 命名规范 :数据库名使用小写字母 + 下划线,由业务名 / 模块名 + 标识组成,如 bit_mall、user_center、java01_test,避免数字开头、使用特殊符号和关键字
- 安全规范 :所有创建 / 删除语句必加 IF NOT EXISTS,提升语句容错性,避免程序执行报错
- 验证规范 :执行创建 / 修改 / 删除操作后,务必通过对应的验证语句确认结果(如 show create database、show databases)
- 权限规范:开发环境使用普通账号,仅分配对应数据库的操作权限,不使用 root 账号,降低误操作风险
- 注释规范 :创建数据库时可通过注释说明业务用途(如
create database if not exists bit_mall comment '电商商城主数据库' character set utf8mb4;),提升代码可读性
九、后续学习方向
掌握数据库的核心操作后,下一步将进入 MySQL 实操的核心环节 ------ 表的操作,表是 MySQL 存储数据的最小单位,也是业务开发的核心载体。后续我们将详细讲解:
- 表的创建、查看、修改、删除操作
- MySQL 常用数据类型(数值型、字符型、日期型)的选择与使用
- 表的约束(主键、外键、非空、唯一、默认值)的配置与作用
- 表的设计规范,如何根据业务需求设计合理的表结构
这些内容是数据库设计的核心,直接决定了数据存储的合理性、安全性和查询效率,也是后续数据增删改查、高级查询的基础。

总结
以上就是今天要讲的内容,本文简单记录了数据结构学习内容,仅作为一份简单的笔记使用,大家根据注释理解,您的点赞关注收藏就是对小编最大的鼓励!