数据库的创建、选择与删除
本教程共 46 篇 · 第 6 篇 · 更新于 2026-07-30 · 约 10 分钟阅读
6. 数据库的创建、选择与删除
本节目标:学会用 SQL 创建、查看、选择、删除数据库,理解 IF NOT EXISTS 的作用、建库时如何指定字符集,以及库名大小写等细节,把”库”这一层彻底搞懂。
前面打好了地基,现在开始真正动手。数据库(Database)是 MySQL 里最大的容器,表都装在库里。这一节我们学怎么管理”库”这一层。
6.1 数据库的层级关系
先理清 MySQL 里的层级,别搞混:
MySQL 服务器
└── 数据库(Database / Schema)
└── 表(Table)
└── 行(Row)/ 列(Column)
一个 MySQL 服务器里有多个数据库,每个数据库里有多个表。我们平时说”建库""建表”,就是从外到内一层层建。
Note在 MySQL 里,数据库(Database)和模式(Schema)是同一个东西。
CREATE DATABASE和CREATE SCHEMA效果完全一样。习惯上用DATABASE。
6.2 查看现有数据库:SHOW DATABASES
刚装好的 MySQL,里面已经自带几个系统库。先看看都有啥:
SHOW DATABASES;
输出:
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.01 sec)
这四个是系统库,作用各不相同:
information_schema:存放所有数据库的”元数据”(有哪些表、列、字符集等),是”信息字典”;mysql:存放用户账号、权限等系统信息;performance_schema:性能监控数据;sys:基于 performance_schema 的视图,方便人看。
Warning这四个系统库只看不改。别在里面建表、删表,搞坏了 MySQL 自己就出问题了。
6.3 创建数据库:CREATE DATABASE
建库的基本语法:
CREATE DATABASE 数据库名;
来建一个我们后面要一直用的 shop 库:
CREATE DATABASE shop;
成功会返回:
Query OK, 1 row affected (0.02 sec)
带 IF NOT EXISTS
如果库已经存在,再建会报错:
mysql> CREATE DATABASE shop;
ERROR 1007 (HY000): Can't create database 'shop'; database exists
加上 IF NOT EXISTS,存在就跳过,不报错:
CREATE DATABASE IF NOT EXISTS shop;
Tip写脚本、自动化部署时,
IF NOT EXISTS几乎是必备的。它让脚本可重复执行而不报错。但注意:它只是”如果存在就不建”,不会帮你检查库里的内容。
指定字符集和排序规则
建库时可以指定字符集(Character Set)和排序规则(Collation)。MySQL 8.0+ 默认是 utf8mb4 和 utf8mb4_0900_ai_ci,一般不用改。但显式写上更清晰:
CREATE DATABASE shop
CHARACTER SET utf8mb4
COLLATE utf8mb4_0900_ai_ci;
CHARACTER SET utf8mb4:用 4 字节的 UTF-8,能存中文和 emoji;COLLATE utf8mb4_0900_ai_ci:排序规则,ai表示不区分重音,ci表示不区分大小写。
Warning千万别用老的
utf8!MySQL 里的utf8是”假的”,最多存 3 字节,存不下 emoji 和部分生僻字。新项目统一用utf8mb4。字符集后面有专门一章细讲。
查看建库时实际用的字符集:
SHOW CREATE DATABASE shop;
输出类似:
+----------+------------------------------------------------------------------+
| Database | Create Database |
+----------+------------------------------------------------------------------+
| shop | CREATE DATABASE `shop` /*!40100 DEFAULT CHARACTER SET utf8mb4 ...|
+----------+------------------------------------------------------------------+
6.4 选择数据库:USE
库建好了,要”进去”才能建表。用 USE 切换当前数据库:
USE shop;
看到 Database changed 就说明切过去了。之后所有操作都默认在 shop 库里进行。
查看当前在哪个库:
SELECT DATABASE();
mysql> SELECT DATABASE();
+------------+
| DATABASE() |
+------------+
| shop |
+------------+
1 row in set (0.00 sec)
Note每开一个新的
mysql会话,“当前库”都是空的,必须重新USE。它是每个连接独立记住的状态。另外,连接时也能直接指定库:
mysql -u root -p shop
这样连上后当前库就是 shop。
Warning上面命令里
shop紧跟在-p后面,它不是密码,是数据库名。密码要回车后再输。别把数据库名当密码写在-p后面,那样既连不上又暴露了。
6.5 库名的大小写规则
这是个容易踩的坑。库名(表名也一样)的大小写敏感性取决于操作系统:
- Linux:区分大小写。
shop和Shop是两个不同的库,必须严格按创建时的大小写引用; - Windows / macOS:默认不区分大小写,
shop和Shop指向同一个库。
官方建议:无论什么系统,都按创建时的大小写来引用,养成习惯就不出错。
-- Linux 上这样会报错(建的是 shop,引用成 Shop)
CREATE DATABASE shop;
USE Shop; -- ERROR: Unknown database 'Shop'
6.6 查看数据库里的表
进入某个库后,看看里面有哪些表:
USE shop;
SHOW TABLES;
刚建的空库,输出是:
Empty set (0.00 sec)
等后面建了表,就会列出来:
+----------------+
| Tables_in_shop |
+----------------+
| orders |
| users |
+----------------+
2 rows in set (0.00 sec)
表头 Tables_in_shop 里的 shop 就是当前库名,看表头就知道在哪个库里。
6.7 删除数据库:DROP DATABASE
删库用 DROP DATABASE:
DROP DATABASE shop;
这条会把库连同里面所有表和数据一起删掉,不可恢复。
为了防止删不存在的库报错,加 IF EXISTS:
DROP DATABASE IF EXISTS shop;
不存在时只给个警告,不报错:
Query OK, 0 rows affected, 1 warning (0.00 sec)
Warning
DROP DATABASE是最危险的操作之一,删库跑路的梗就来自这。执行前一定三思:
- 确认库名没写错;
- 确认连的不是生产库;
- 重要数据先备份。
MySQL 没有”撤销”,删了就是真删了。
6.8 修改数据库:ALTER DATABASE
库建好后,还能改它的字符集和排序规则:
ALTER DATABASE shop
CHARACTER SET utf8mb4
COLLATE utf8mb4_0900_ai_ci;
注意 ALTER DATABASE 只能改库级别的属性(字符集、排序规则),不能改库名。想改库名,只能新建一个库、把表导过去、再删旧库。
Tip改库的字符集只影响之后新建的表,已存在的表不会自动跟着变。要让旧表也换字符集,得逐个
ALTER TABLE。
6.9 一个完整的库操作流程
把这一节的命令串起来,走一遍完整流程:
-- 1. 看看现在有哪些库
SHOW DATABASES;
-- 2. 建一个新库(带字符集)
CREATE DATABASE IF NOT EXISTS shop
CHARACTER SET utf8mb4
COLLATE utf8mb4_0900_ai_ci;
-- 3. 确认建好了
SHOW CREATE DATABASE shop;
-- 4. 切进去
USE shop;
-- 5. 确认当前库
SELECT DATABASE();
-- 6. 看里面的表(此时为空)
SHOW TABLES;
-- 7.(练习完想删掉)
-- DROP DATABASE IF EXISTS shop;
6.10 小结
这一节学会了”库”这一层的全部操作:
SHOW DATABASES查所有库,系统库只看不改;CREATE DATABASE [IF NOT EXISTS] 库名建库,可指定字符集;- 8.0+ 默认字符集
utf8mb4,禁用老utf8; USE 库名切换当前库,每会话独立;- 库名大小写 Linux 上敏感,建议统一按创建时的大小写引用;
DROP DATABASE IF EXISTS删库,危险操作,执行前三思;ALTER DATABASE只能改字符集,不能改名。
库建好了,下一节开始往里面填”表”。不过在学建表前,得先认识数据类型—先从数值类型讲起。