MySQL 基本操作——数据库
本文档只讲 针对“数据库”本身的基本操作:查看、创建、选择、修改、删除数据库,以及字符集、命名等。每一步都配有详细说明和多个示例,适合零基础新手跟着做。
目录
- “基本操作-数据库”指什么
- 操作前:如何连接 MySQL
- 查看所有数据库
- 创建数据库
- 选择(使用)数据库
- 查看当前使用的是哪个数据库
- 查看数据库的创建信息
- 修改数据库
- 删除数据库
- 数据库命名规则与建议
- 字符集与排序规则(入门)
- 常见错误与注意点
- 完整示例:从零建一个练习库
- 命令速查表
1. “基本操作-数据库”指什么
在 MySQL 里,数据的组织是分层的:
数据库(Database) ← 本文只讲这一层
└── 表(Table)
└── 行、列(数据)
“基本操作-数据库” 指的是对 数据库这一层 的增删改查,不涉及表里的数据,包括:
- 查看:当前服务器上有哪些数据库
- 创建:新建一个数据库
- 选择:指定“当前要操作的数据库”(后续建表、查表都在这个库里)
- 修改:改数据库的字符集、排序规则等
- 删除:删除整个数据库(慎用)
这些操作是使用 MySQL 的第一步:先有库,再在库里建表、插数据。
2. 操作前:如何连接 MySQL
所有“数据库”操作都要在 已经连上 MySQL 的前提下进行。
2.1 在命令行连接
打开 CMD 或 PowerShell,输入(把密码换成你自己的):
mysql -u root -p
回车后输入 root 密码,看到提示符变成 mysql> 就表示已经连接成功。
示例(连接成功):
C:UsersAdministrator> mysql -u root -p
Enter password: ****
Welcome to the MySQL monitor.
...
mysql>
2.2 连接时直接指定数据库(可选)
若已知要用的数据库名,可以在登录时直接“进入”该库:
mysql -u root -p 数据库名
例如:
mysql -u root -p school
输入密码后,会连上 MySQL,并且当前数据库已经是 school,无需再执行 USE school;。
示例:
mysql -u root -p school
Enter password: ****
...
mysql> SELECT DATABASE();
+------------+
| DATABASE() |
+------------+
| school |
+------------+
3. 查看所有数据库
3.1 基本命令:SHOW DATABASES
在 mysql> 下输入:
SHOW DATABASES;
注意: 末尾的 分号 ; 表示一条 SQL 结束,必须写上。
示例输出:
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| school |
| sys |
+--------------------+
5 rows in set (0.00 sec)
上面会列出当前 MySQL 服务器上所有数据库的名字。
3.2 输出结果说明
- information_schema:存放数据库、表、列等“元信息”,系统用,不要删改。
- mysql:存放用户、权限等,系统用,不要删改。
- performance_schema:性能相关数据,系统用。
- sys:系统视图,方便诊断,系统用。
- school:可能是你或教程里自己建的库。
新手记住:带 schema 或 mysql、sys 的一般是系统库,只操作你自己建的库(如 school、test)即可。
3.3 只查看“非系统”的数据库(了解)
若想排除系统库,可以用(了解即可,不必强记):
SHOW DATABASES WHERE `Database` NOT IN ('information_schema','mysql','performance_schema','sys');
或用 LIKE 按名字模糊匹配:
SHOW DATABASES LIKE 's%';
表示只显示名字以 s 开头的数据库,例如 school、sys。
4. 创建数据库
4.1 最简写法:CREATE DATABASE 库名
语法:
CREATE DATABASE 数据库名;
示例:创建一个名叫 school 的数据库
CREATE DATABASE school;
示例输出:
Query OK, 1 row affected (0.02 sec)
表示创建成功。再用 SHOW DATABASES; 就能看到 school。
4.2 避免“库已存在”报错:IF NOT EXISTS
如果 school 已经存在,再执行一次 CREATE DATABASE school; 会报错:
ERROR 1007 (HY000): Can't create database 'school'; database exists
可以加上 IF NOT EXISTS:只有在该库不存在时才创建,存在就跳过不报错。
CREATE DATABASE IF NOT EXISTS school;
示例:
- 第一次执行:会创建
school。 - 第二次再执行:不会报错,也不会重复创建。
适合写在脚本里,重复执行也不会出错。
4.3 指定字符集和排序规则(推荐)
为了正确存中文、emoji 等,建议创建时就指定 utf8mb4:
CREATE DATABASE 数据库名
DEFAULT CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
示例:
CREATE DATABASE school
DEFAULT CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
- DEFAULT CHARACTER SET utf8mb4:该库下表的默认字符集为 utf8mb4(支持中文、emoji)。
- COLLATE utf8mb4_unicode_ci:默认排序/比较规则,
ci表示比较时不区分大小写。
若不做特殊要求,建库时用上面这一句即可。
4.4 一次创建多个数据库(少见)
MySQL 允许一条语句创建多个库(不常用,了解即可):
CREATE DATABASE db1;
CREATE DATABASE db2;
CREATE DATABASE db3;
不能写成 CREATE DATABASE db1, db2, db3;,必须分开写或多条语句。
4.5 完整示例汇总
-- 最简
CREATE DATABASE mydb;
-- 推荐:带字符集 + 不存在才创建
CREATE DATABASE IF NOT EXISTS mydb
DEFAULT CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
5. 选择(使用)数据库
创建好数据库后,建表、查表、插数据 等操作都要在“当前选中的数据库”里进行。选中某个库的动作叫 “使用”或“选择”数据库。
5.1 命令:USE 数据库名
语法:
USE 数据库名;
示例:选择 school 数据库
USE school;
示例输出:
Database changed
表示之后的操作默认都在 school 里进行,直到你再次 USE 别的库或断开连接。
5.2 选择后会发生什么
- 之后执行的 CREATE TABLE 会在这个库里建表。
- *SELECT FROM 表名** 会先在这个库里找
表名。 - 若表名在多个库里存在,不写库名时用当前库里的表。
示例:
USE school;
CREATE TABLE students (id INT, name VARCHAR(50)); -- 表建在 school 里
SELECT * FROM students; -- 查的是 school.students
5.3 不写 USE,直接带库名(可选)
也可以不执行 USE,在写表名时带上库名:
SELECT * FROM school.students;
这里 库名.表名 叫“完全限定名”。但习惯上我们会先 USE school;,再写 SELECT * FROM students;,更简洁。
5.4 若库不存在会怎样
如果写错了库名或库还没建:
USE not_exist_db;
会报错:
ERROR 1049 (42000): Unknown database 'not_exist_db'
解决:先用 SHOW DATABASES; 确认库名,再 USE 正确库名;。
6. 查看当前使用的是哪个数据库
6.1 命令:SELECT DATABASE();
在 mysql> 下执行:
SELECT DATABASE();
示例输出(当前已选择 school):
+------------+
| DATABASE() |
+------------+
| school |
+------------+
1 row in set (0.00 sec)
若还没有执行过任何 USE,或连接时没指定库,可能显示:
+------------+
| DATABASE() |
+------------+
| NULL |
+------------+
NULL 表示当前没有选中任何数据库。此时若执行 CREATE TABLE xxx (...); 会报错:没有选择数据库。
6.2 使用场景
- 不确定当前在哪个库时,先
SELECT DATABASE();确认。 - 在脚本或教程里,用它可以“打印当前库”,方便排查问题。
7. 查看数据库的创建信息
7.1 命令:SHOW CREATE DATABASE 库名
语法:
SHOW CREATE DATABASE 数据库名;
会显示创建该库时用的完整 SQL(包括字符集、排序规则)。
示例:
SHOW CREATE DATABASE school;
示例输出:
+----------+----------------------------------------------------------------+
| Database | Create Database |
+----------+----------------------------------------------------------------+
| school | CREATE DATABASE `school` /*!40100 DEFAULT CHARACTER SET utf8mb4 |
| | COLLATE utf8mb4_unicode_ci */ |
+----------+----------------------------------------------------------------+
可以看到该库的 DEFAULT CHARACTER SET 和 COLLATE,便于对照或重建库。
8. 修改数据库
创建后,一般很少改数据库本身,但可以改默认字符集和排序规则。
8.1 命令:ALTER DATABASE
语法:
ALTER DATABASE 数据库名
[选项1] [选项2] ...;
常用选项:
- CHARACTER SET 字符集名
- COLLATE 排序规则名
8.2 示例:修改默认字符集为 utf8mb4
ALTER DATABASE school
DEFAULT CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
说明:
- 这只影响该库之后新建的表的默认字符集。
- 已经存在的表不会自动改,需要单独对表执行
ALTER TABLE ... CONVERT TO CHARACTER SET utf8mb4;等(表操作会在别的文档里讲)。
8.3 只改排序规则
ALTER DATABASE school COLLATE utf8mb4_general_ci;
9. 删除数据库
9.1 命令:DROP DATABASE 库名
语法:
DROP DATABASE 数据库名;
示例:删除名为 test_db 的数据库
DROP DATABASE test_db;
示例输出:
Query OK, 0 rows affected (0.05 sec)
表示删除成功。该库里的所有表和所有数据都会一起被删掉,且无法恢复。
9.2 避免“库不存在”报错:IF EXISTS
若库本来就不存在,直接 DROP DATABASE xxx; 会报错:
ERROR 1008 (HY000): Can't drop database 'xxx'; database doesn't exist
可以加上 IF EXISTS:只有存在才删除,不存在就跳过不报错。
DROP DATABASE IF EXISTS test_db;
适合写在脚本里。
9.3 重要提醒
- 不要对系统库执行
DROP DATABASE(如mysql、information_schema等),可能导致 MySQL 无法正常使用。 - 删除前务必确认库名,建议先用
SHOW DATABASES;和USE 库名;确认一次。 - 若当前正在使用该库(刚执行过
USE 该库),也可以删除;删除后当前“选中的库”会变成未选中(SELECT DATABASE();为 NULL)。
9.4 示例:安全删除
-- 先确认
SHOW DATABASES;
-- 再删除(存在才删)
DROP DATABASE IF EXISTS old_backup_db;
10. 数据库命名规则与建议
10.1 合法字符与规则
- 可由字母、数字、下划线
_组成。 - 不能是纯数字,不能包含空格、横线
-、点.等(除非用反引号包起来,不推荐)。 - 长度限制:MySQL 库名长度受限于目录名长度(通常足够用)。
10.2 推荐写法
- 小写英文:如
school、user_system。 - 见名知意:
order_db、blog、shop。 - 多个词用下划线:
student_manage、product_db。
10.3 不推荐
- 用中文或拼音(兼容性、可读性差):如
学生库、xuesheng(除非团队约定)。 - 用横线:
my-db容易和减号混淆。 - 过长或过短:太长难写,太短不知含义。
10.4 若必须用特殊字符(不推荐)
可以用反引号把名字包起来(仅作了解):
CREATE DATABASE `my-db`;
USE `my-db`;
11. 字符集与排序规则(入门)
11.1 为什么要在“数据库”这层设字符集
- 字符集决定能存哪些字符(如中文、emoji)。
- 建库时指定 DEFAULT CHARACTER SET,以后在该库里建表时,若不单独指定,表会继承库的字符集,省事且统一。
11.2 常用字符集
| 字符集 | 说明 |
|---|---|
| utf8mb4 | 推荐,完整 UTF-8,支持中文、emoji |
| utf8 | MySQL 里实际只支持 3 字节,不推荐 |
| gbk | 中文环境常见,但不如 utf8mb4 通用 |
建议:统一用 utf8mb4。
11.3 排序规则(COLLATE)简单理解
- 决定字符串怎么比较、怎么排序(如 ORDER BY 名字)。
- utf8mb4_unicode_ci:按 Unicode 规则,
ci表示不区分大小写。 - utf8mb4_general_ci:稍快但略粗糙,一般用 unicode_ci 即可。
建库时写:
CREATE DATABASE mydb
DEFAULT CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
就足够应对绝大多数场景。
12. 常见错误与注意点
12.1 忘记写分号
SHOW DATABASES
MySQL 会认为语句没结束,提示符变成 ->,需要补上 ; 并回车。
正确:
SHOW DATABASES;
12.2 库名、表名大小写(Windows vs Linux)
- Windows 下库名、表名通常不区分大小写。
- Linux 下可能区分,取决于配置。
建议:全程小写,避免换系统后出问题。
12.3 未选择数据库就建表
若没执行 USE 某库; 就执行:
CREATE TABLE students (id INT);
会报错:
ERROR 1046 (3D000): No database selected
解决:先 USE 数据库名; 再建表。
12.4 删除错了库
没有“回收站”,DROP DATABASE 后无法恢复。只能靠备份恢复。所以删除前务必确认库名,生产环境更要谨慎。
13. 完整示例:从零建一个练习库
下面把“查看 → 创建 → 选择 → 确认 → 删除”串起来做一遍,你可以在自己电脑上跟着执行(删除那步可以换成不重要的库名练习)。
-- 1. 查看当前有哪些数据库
SHOW DATABASES;
-- 2. 创建练习库(带字符集,不存在才创建)
CREATE DATABASE IF NOT EXISTS practice_db
DEFAULT CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
-- 3. 再次查看,确认 practice_db 已出现
SHOW DATABASES;
-- 4. 选择该库
USE practice_db;
-- 5. 确认当前库
SELECT DATABASE();
-- 6. 查看创建信息
SHOW CREATE DATABASE practice_db;
-- 7. (可选)建一张简单表,确认库可用
CREATE TABLE demo (id INT, name VARCHAR(20));
SHOW TABLES;
-- 8. 若确定不再需要,可删除(慎用)
-- 先切到别的库再删,避免“当前库”状态
USE mysql;
DROP DATABASE IF EXISTS practice_db;
SHOW DATABASES;
建议:保留 practice_db 用来练手,只在不用的库上练习 DROP DATABASE。
14. 命令速查表
| 操作 | 命令 |
|---|---|
| 查看所有数据库 | SHOW DATABASES; |
| 创建数据库 | CREATE DATABASE 库名; |
| 创建(不存在才创建) | CREATE DATABASE IF NOT EXISTS 库名 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; |
| 选择数据库 | USE 库名; |
| 查看当前库 | SELECT DATABASE(); |
| 查看库的创建信息 | SHOW CREATE DATABASE 库名; |
| 修改库(字符集) | ALTER DATABASE 库名 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; |
| 删除数据库 | DROP DATABASE 库名; |
| 删除(存在才删) | DROP DATABASE IF EXISTS 库名; |
把以上“数据库”层面的操作练熟后,再学表的创建与增删改查就会很顺。建议在 MySQL 里把 13 节的完整示例跑一遍,并反复用 SHOW DATABASES; 和 USE、SELECT DATABASE(); 加深印象。