MYSQL:库的操作

发布于:2025-07-19 ⋅ 阅读:(14) ⋅ 点赞:(0)

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 是核心指令。DATABASESCHEMA 在这里是同义词,用哪个都行。
  • [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 SETCOLLATE。这两个概念对于处理各种语言的文字(尤其是中文)至关重要,我们必须搞明白。

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 的缩写,表示“不区分大小写”。比如 Aa 会被认为是一样的。

与之对应的还有:

  • 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 注意事项

这是一个非常危险的操作,一定要三思而后行!

  • 删除数据库会永久移除库里所有的数据和表,通常是不可恢复的。
  • 在生产环境中,执行这个命令前一定要再三确认,并且做好备份。
  • 删除之后,物理存储上对应的文件夹也会被一并删除。

网站公告

今日签到

点亮在社区的每一天
去签到