文章目录
- MYSQL:库的操作
- 1. 本文简述
- 2. 查看数据库
- 2.1 语法
- 3. 创建数据库
- 3.1 语法
- 3.2 示例
- 3.2.1 创建一个简单的数据库
- 3.2.2 使用 `IF NOT EXISTS` 防止重复创建
- 3.2.3 再次运行,观察现象
- 3.2.4 查看这个警告到底是什么
- 3.2.5 创建数据库允许使用关键字
- 4. 字符集与排序规则
- 4.1 查看支持的字符集
- 4.2 查看支持的排序规则
- 4.3 字符集与排序规则的影响
- 4.4 查看系统默认配置
- 4.5 创建时指定字符集和排序规则
- 5. 查看数据库的“出生证明”
- 5.1 语法
- 5.2 示例
- 6. 修改数据库
- 6.1 语法
- 6.2 示例
- 7. 删除数据库
- 7.1 语法
- 7.2 示例
- 7.3 注意事项
MYSQL:库的操作
在学习任何数据库时,最基础也是最重要的一步,就是学会如何管理“库”(Database)。MySQL中关于库的增、删、改、查等一系列核心操作。
1. 本文简述
- 熟练地创建、查看、修改和删除数据库。
- 理解字符集(Character Set)和排序规则(Collation)这两个重要概念。
2. 查看数据库
在我们开始创建自己的数据库之前,不妨先看看当前MySQL中已经有哪些数据库了。这就像是来到一个新的工作台,先熟悉一下上面都有些什么工具。
2.1 语法
我们可以用下面这个非常直观的命令来查看:
-- 注意,这里的 DATABASES 是复数形式
show databases;
- 这个命令对大小写不敏感,所以
show databases;
和SHOW DATABASES;
的效果是一样的。
3. 创建数据库
熟悉了环境,接下来就是重头戏——创建我们自己的数据库。
3.1 语法
创建数据库的基本语法是这样的:
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'}
}
我们来拆解一下这个语法:
CREATE DATABASE
是核心指令。DATABASE
和SCHEMA
在这里是同义词,用哪个都行。[IF NOT EXISTS]
是一个非常有用的可选项。它表示“如果这个数据库不存在,那么就创建它”。这可以避免因为数据库已存在而导致的执行错误。db_name
就是我们要给数据库起的名字。CHARACTER SET
:用来指定数据库默认的字符集编码,比如我们常用的utf8mb4
。COLLATE
:用来指定数据库的排序规则,它决定了数据库如何对字符串进行比较和排序。ENCRYPTION
:这是MySQL 8.0.16版本引入的新选项,用于设定数据库是否默认加密。
3.2 示例
理论说完了,我们来实际上手操作一下。
3.2.1 创建一个简单的数据库
比如,我们来创建一个名为 test001
的数据库。
mysql> create database test001;
看到 Query OK
,就说明我们的第一个数据库已经成功创建!
3.2.2 使用 IF NOT EXISTS
防止重复创建
如果我们不确定一个数据库是否存在,最好带上 IF NOT EXISTS
。
mysql> create database if not exists testdb;
3.2.3 再次运行,观察现象
如果我们再运行一次上面的命令,会发生什么呢?
mysql> create database if not exists testdb;
Query OK, 1 row affected, 1 warning (0.01 sec) -- 注意,这次出现了一个警告(warning)
没有报错,但多了一个 warning
。这正是 IF NOT EXISTS
的作用:它发现 testdb
已经存在,所以没有执行创建操作,而是给出了一个提示。
3.2.4 查看这个警告到底是什么
我们可以用 show warnings;
命令来查看具体信息:
mysql> show warnings;
1 row in set (0.00 sec)
-- 提示信息很明确:无法创建 'testdb',因为它已经存在了。
这个过程很好地展示了 IF NOT EXISTS
如何让我们的操作更加“健壮”。
顺便一提,当一个数据库被成功创建后,MySQL会在其数据目录下生成一个和数据库同名的文件夹,用来存放这个库里所有的数据和表。
3.2.5 创建数据库允许使用关键字
CREATE DATABASE `database`;
MySQL中允许开发者使用关键字命名,使用反引号把关键字引起来,database
使用其他关键字同理:from to password user
4. 字符集与排序规则
在创建数据库时,我们提到了两个重要选项:CHARACTER SET
和 COLLATE
。这两个概念对于处理各种语言的文字(尤其是中文)至关重要,我们必须搞明白。
4.1 查看支持的字符集
MySQL支持哪些字符集?我们可以用 show charset;
命令查看。
show charset;
- 在 MySQL 8.0 版本中,默认的字符集是
utf8mb4
,它几乎可以表示世界上所有的字符,非常强大。而在稍早的 MySQL 5.7 版本中,默认的还是latin1
,它对中文的支持就不那么友好了。
4.2 查看支持的排序规则
与字符集配套的是排序规则,它定义了字符之间如何比较大小。我们可以用 show collation;
查看所有支持的规则。
show collation;
- 同样,MySQL 8.0 默认的排序规则是
utf8mb4_0900_ai_ci
,而 5.7 版本默认是utf8mb4_general_ci
。
4.3 字符集与排序规则的影响
这些规则的名字看起来很长,但其实是很有规律的。我们以 utf8mb4_0900_ai_ci
为例来解读一下:
utf8mb4
: 指的是字符集。它是对Unicode标准的一种实现,最多使用4个字节来表示一个字符,因此能完美支持包括Emoji在内的各种文字。0900
: 指的是它所基于的Unicode排序算法(UCA)的版本,这里是 9.0.0。ai
: Accent-insensitive 的缩写,表示“不区分声调”。比如a
和á
会被认为是一样的。ci
: Case-insensitive 的缩写,表示“不区分大小写”。比如A
和a
会被认为是一样的。
与之对应的还有:
as
: Accent-sensitive,区分声调。cs
: Case-sensitive,区分大小写。bin
: Binary,二进制排序。直接根据字符的二进制编码来比较,最严格,效率也最高。
理解了这些,我们就能根据需求选择最合适的排序规则了。
4.4 查看系统默认配置
那么,当前整个MySQL服务的默认配置是什么呢?我们可以通过查询系统变量来看到。
查看系统默认字符集:
mysql> show variables like '%character%';
-- 这个命令会列出所有和 'character' 相关的系统变量
查看系统默认排序规则:
mysql> show variables like '%collation%';
-- 这个命令会列出所有和 'collation' 相关的系统变
4.5 创建时指定字符集和排序规则
现在我们知道了这些概念,就可以在创建数据库时明确指定它们了。
-- 创建一个名为 java01 的库,如果它不存在
-- 明确指定使用 utf8mb4 字符集
-- 和 utf8mb4_0900_ai_ci 排序规则
create database if not exists java01 character set utf8mb4 collate utf8mb4_0900_ai_ci;
5. 查看数据库的“出生证明”
当我们想回顾一个数据库当初是如何被创建的,比如它的默认字符集是什么,就可以查看它的创建语句。
5.1 语法
show create database db_name;
5.2 示例
我们来看看刚才创建的 java01
库。
mysql> show create database java01;
这里有几个有趣的细节:
- 数据库名
java01
被反引号`
包围了。这是一个好习惯,可以防止我们的库名或表名与MySQL的关键字冲突。 /*!40100 ... */
和/*!80016 ... */
这种看起来像注释的语法,其实是MySQL的特定版本执行指令。它表示:只有当MySQL的版本大于等于4.01.00(或8.0.16)时,才执行里面的语句。这是一种保证向后兼容性的巧妙设计。
6. 修改数据库
如果数据库创建之后,我们想修改它的一些属性,比如改一下默认的字符集,也是可以的。
6.1 语法
ALTER {DATABASE | SCHEMA} [db_name]alter_option ...alter_option: {[DEFAULT] CHARACTER SET [=] charset_name| [DEFAULT] COLLATE [=] collation_name| [DEFAULT] ENCRYPTION [=] {'Y' | 'N'}| READ ONLY [=] {DEFAULT | 0 | 1}
}
对数据库的修改,最常见的就是修改它的默认字符集和排序规则。
6.2 示例
我们来把之前创建的 test001
数据库的字符集改成 gbk
。
mysql> alter database test001 character set gbk;
Query OK, 1 row affected (0.01 sec)-- 修改完之后,我们再来查看一下它的创建语句,验证一下
mysql> show create database test001;
可以看到,默认字符集已经成功变成了 gbk
。
7. 删除数据库
最后,我们来看看如何删除一个数据库。
7.1 语法
DROP {DATABASE | SCHEMA} [IF EXISTS] db_name;
7.2 示例
mysql> drop database testdb;
7.3 注意事项
这是一个非常危险的操作,一定要三思而后行!
- 删除数据库会永久移除库里所有的数据和表,通常是不可恢复的。
- 在生产环境中,执行这个命令前一定要再三确认,并且做好备份。
- 删除之后,物理存储上对应的文件夹也会被一并删除。