MySQL数据库(库)操作精讲:从入门到精通


---数据库专栏---


1. 数据库操作目标与基础

学习本节内容,我们的主要目标是掌握创建、查看、修改和删除数据库。在此基础上,我们还需要深入理解 字符集编码排序规则 的概念。


2. 查看现有数据库

在进行任何数据库操作之前,通常需要先查看当前系统中已存在的数据库列表。

2.1 SHOW DATABASES 语法

使用 SHOW DATABASES 命令可以列出所有数据库。

代码块 1:查看所有数据库

sql 复制代码
show databases;

要点提示: databases 是复数形式。该关键字是大小写不敏感的。


3. 创建数据库(CREATE DATABASE)

创建数据库是数据库管理的第一步。我们可以使用 CREATE DATABASECREATE SCHEMA 命令。

3.1 CREATE DATABASE 语法详解

创建数据库的基本语法如下:

sql 复制代码
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]: 中括号表示是可选项。
  • {...} : 大插号表示必须选。
3.2 创建参数:字符集与排序规则

在创建数据库时,可以指定以下重要的可选参数:

参数名称 描述
CHARACTER SET 指定数据库采用的字符集编码
COLLATE 指定数据库字符集的校验(排序)规则
ENCRYPTION 数据库是否加密,这是 MySQL 8.0.16 中引入的新选项
3.3 数据库创建实战示例

代码块 2:基础数据库创建

创建一个名为 test001 的数据库:

sql 复制代码
mysql> create database test001;
Query OK, 1 row affected (0.01 sec)

代码块 3:条件性数据库创建

创建一个名为 testdb 的数据库,如果它不存在则创建 (IF NOT EXISTS):

sql 复制代码
mysql> create database if not exists testdb;
Query OK, 1 row affected (0.01 sec)

数据库创建成功后,MySQL 会在数据目录下生成一个与数据库同名的目录,用于保存数据库中的所有数据。

3.4 查看创建过程中的警告信息

如果重复运行 代码块 3 的语句,系统将不会报错,但会产生一个警告:

代码块 4:查看警告信息

sql 复制代码
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 的数据库已存在。


4. 字符集编码与校验规则深度解析

字符集编码(Character Set)和校验规则(Collation)是影响数据库数据存储、检索、和比较的关键因素。

4.1 查看数据库支持的字符集编码

要查看当前数据库系统支持的所有字符集编码,可以使用 SHOW CHARSET 命令。

代码块 5:查看字符集

sql 复制代码
show charset;
  • 默认值: MySQL 8.0 默认的字符集编码是 utf8mb4,而 MySQL 5.7 默认的字符集是 latin1
4.2 查看数据库支持的排序规则

要查看当前数据库系统支持的所有排序规则,可以使用 SHOW COLLATION 命令。

代码块 6:查看排序规则

sql 复制代码
show collation;
  • 默认值: MySQL 8.0 默认的排序规则是 utf8mb4_0900_ai_ci,MySQL 5.7 默认排序规则是 utf8mb4_general_ci。此处由于列出篇幅过长,截图不完整。
4.3 排序规则(Collation)对数据库的影响

排序规则决定了字符串的比较和排序方式。

  • 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: 表示二进制。
4.4 查看系统默认字符集与排序规则

我们可以通过查看系统变量来了解当前的默认设置。

代码块 7:查看系统默认字符集

sql 复制代码
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:查看系统默认排序规则

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
4.5 创建数据库时指定字符集和校验规则

在创建数据库时,最佳实践是显式指定字符集和排序规则。

代码块 9:指定字符集与排序规则创建数据库

sql 复制代码
create database if not exists java01 
character set utf8mb4 collate utf8mb4_0900_ai_ci;

5. 查看数据库创建语句 (SHOW CREATE DATABASE)

创建完成后,可以使用 SHOW CREATE DATABASE 命令查看数据库的精确创建语句。

5.1 SHOW CREATE DATABASE 语法
sql 复制代码
show create database db_name
5.2 示例

查看我们刚刚创建的 java01 数据库的创建语句:

代码块 10:查看创建语句

sql 复制代码
mysql> show create database java01;

示例输出(部分):

sql 复制代码
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 时,会分别执行对应的语句。


6. 修改数据库(ALTER DATABASE)

对数据库的修改操作主要是修改其字符集和校验规则。

6.1 ALTER DATABASE 语法
sql 复制代码
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}
6.2 修改数据库字符集示例

将数据库 test001 的字符集修改为 gbk

代码块 11:修改字符集

sql 复制代码
mysql> alter database test001 character set gbk;
Query OK, 1 row affected (0.01 sec)

mysql> show create database test001;

修改后的结果(部分):

sql 复制代码
CREATE DATABASE test001 /*!40100 DEFAULT CHARACTER SET gbk */ /*!80016 DEFAULT ENCRYPTION='N' */

7. 删除数据库(DROP DATABASE)

删除数据库是一个非常危险的操作,操作前务必谨慎。

7.1 DROP DATABASE 语法与示例

删除数据库的语法如下:

sql 复制代码
DROP {DATABASE | SCHEMA} [IF EXISTS] db_name

代码块 12:删除数据库

sql 复制代码
mysql> drop database testdb;
Query OK, 0 rows affected (0.04 sec)
7.2 ⚠️ 注意事项:删除操作的风险
  • 危险操作: 不要随意删除数据库。
  • 物理删除: 删除数据库之后,数据库对应的目录及其中的所有文件也会被删除。
  • 不可见: 删除后,使用 show databases; 语句将无法再查看该数据库。

⭐ 总结与思考

本文详细梳理了MySQL数据库的 CRUD (Create, Retrieve, Update, Delete) 基础操作,并深入探讨了字符集与排序规则对数据存储和检索的影响。其中,utf8mb4 字符集和 utf8mb4_0900_ai_ci 排序规则是 MySQL 8.0 的默认推荐设置。

最后,请思考一个问题: 如果你创建了一个使用 gbk 字符集的数据库,并在其中插入了 Emoji 字符(GBK 不支持),MySQL 会如何处理这个数据?欢迎在评论区留下你的见解!


相关推荐
Gauss松鼠会44 分钟前
【GaussDB】如何从GaussDB发布包中提取出内核二进制文件
linux·数据库·database·gaussdb
天行健,君子而铎1 小时前
“数据防泄漏”(Data Loss Prevention, DLP)
大数据·数据库·安全·系统安全·学习方法·安全架构
Highcharts.js1 小时前
Highcharts Gantt 甘特图任务配置文档说明
java·数据库·甘特图·模板模式·highcharts·任务关系
tonysh_zds3 小时前
windows pip install pysqlite3 安装失败处理
数据库·sqlite·pip
rising start3 小时前
一、数据库分类及SQLite入门
数据库·sqlite
5***E6859 小时前
【SQL】写SQL查询时,常用到的日期函数
数据库·sql
遇见火星9 小时前
CentOS7 通过源码安装 Redis
数据库·redis·缓存
Mr.朱鹏9 小时前
RocketMQ安装与部署指南
java·数据库·spring·oracle·maven·rocketmq·seata
Coder-coco9 小时前
个人健康管理|基于springboot+vue+个人健康管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·mysql·论文