
在 MySQL 的学习和实战中,数据库(库)的操作是最基础也是最核心的环节,无论是项目开发、数据管理还是运维维护,都绕不开库的创建、配置、修改、备份等一系列操作。很多刚接触 MySQL 的小伙伴容易在字符集、校验规则、备份恢复这些细节上踩坑,今天这篇文章就结合实战案例,把 MySQL 库的全套操作讲透,从基础语法到高级技巧,从避坑指南到实战演示,让你一文掌握 MySQL 库操作的精髓!

创建数据库是操作 MySQL 的第一步,看似简单的一句命令,背后却藏着字符集、校验规则的关键配置,选对配置能让后续的开发和数据管理少走很多弯路。
MySQL 中创建数据库的官方语法如下,其中大写部分为关键字,中括号[]内的为可选项,也是实际开发中需要重点关注的部分:
CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [, create_specification] ...]; 其中create_specification用于配置数据库的核心属性,主要包含两项:
[DEFAULT] CHARACTER SET charset_name; -- 指定数据库字符集
[DEFAULT] COLLATE collation_name; -- 指定字符集的校验规则这里有两个关键的小细节需要注意:
IF NOT EXISTS:可选但建议必加,避免创建已存在的数据库时抛出错误,让 SQL 语句更健壮;DEFAULT关键字:可省略,不影响功能,写出来会让语法更清晰,明确是设置默认属性。结合语法,我们分三种常见场景演示数据库的创建,覆盖从简单到个性化配置的全部情况。
如果创建时不指定字符集和校验规则,MySQL 会使用默认的字符集utf8,校验规则utf8_general_ci,这也是开发中最常用的默认配置:
-- 创建名为db1的数据库,使用默认字符集和校验规则
create database db1; 如果需要自定义字符集,可通过charset关键字指定,校验规则会沿用该字符集的默认值:
-- 创建名为db2的数据库,指定字符集为utf8
create database db2 charset=utf8;针对有特殊需求的场景(比如区分大小写查询),可以同时指定字符集和对应的校验规则:
-- 创建名为db3的数据库,指定utf8字符集和utf8_general_ci校验规则
create database db3 charset=utf8 collate utf8_general_ci;字符集和校验规则是 MySQL 数据库的核心属性,字符集决定了数据库能存储哪些语言的字符(比如 utf8 支持中文,latin1 不支持中文),校验规则则决定了数据的查询、排序规则(比如是否区分大小写)。很多开发中的乱码、查询结果不符合预期问题,根源都是这两个配置出了问题。
想要知道当前 MySQL 的默认字符集和校验规则,可通过以下两条 SQL 语句查询,这是开发前的必备操作,避免因默认配置不符导致问题:
-- 查看系统默认字符集
show variables like 'character_set_database';
-- 查看系统默认校验规则
show variables like 'collation_database';MySQL 支持多种字符集和对应的校验规则,可通过以下语句查看完整列表,根据需求选择:
-- 查看MySQL支持的所有字符集
show charset;
-- 查看MySQL支持的所有校验规则
show collation;关键提醒:utf8 是目前开发中的主流字符集,支持多语言字符,也是 MySQL 的默认选择,除非有特殊历史需求,否则不建议使用 latin1 等不支持中文的字符集。
校验规则的核心作用体现在数据查询和结果排序上,最典型的就是utf8_general_ci(不区分大小写)和utf8_bin(区分大小写)的区别,我们通过实战案例直观感受。
-- 创建数据库test1,指定校验规则为utf8_general_ci
create database test1 collate utf8_general_ci;
use test1;
-- 创建测试表并插入数据
create table person(name varchar(20));
insert into person values('a'),('A'),('b'),('B');
-- 查询name='a'的数据
select * from person where name='a';
-- 按name排序
select * from person order by name;查询结果:查询name='a'时,会同时返回a和A;排序时不区分大小写,按字母顺序排列。
-- 创建数据库test2,指定校验规则为utf8_bin
create database test2 collate utf8_bin;
use test2;
-- 创建测试表并插入相同数据
create table person(name varchar(20));
insert into person values('a'),('A'),('b'),('B');
-- 查询name='a'的数据
select * from person where name='a';
-- 按name排序
select * from person order by name; 查询结果:查询name='a'时,只返回a;排序时区分大小写,大写字母会排在前面(A、B 在前,a、b 在后)。
核心结论:如果是用户信息、用户名等需要区分大小写的场景,可使用utf8_bin;如果是普通业务数据,建议使用utf8_general_ci,提升查询的灵活性。
创建数据库后,日常的操纵操作主要包括查看数据库信息、修改数据库配置、删除无用数据库,这部分操作语法简单,但需要注意操作的安全性(尤其是删除)。
这条语句是最常用的,能快速获取当前 MySQL 服务中存在的所有数据库,包括系统库和自定义库:
show databases;想要知道某个数据库的详细配置(比如字符集、校验规则),可通过该语句查询,能看到数据库的完整创建语法,包括 MySQL 的版本兼容配置:
-- 查看mytest数据库的创建语句
show create database mytest;查询结果示例:
| Database | Create Database |
|----------|-----------------|
| mytest | CREATE DATABASE `mytest` /*!40100 DEFAULT CHARACTER SET utf8 */ |这里有两个关键细节需要理解:
`:用于防止数据库名与 MySQL 关键字重复,是良好的编码习惯;/*!40100 DEFAULT CHARACTER SET utf8 */:这不是注释!表示当前 MySQL 版本大于 4.01 时,自动执行该语句,实现版本兼容。MySQL 中对数据库的修改仅支持字符集和校验规则的修改,不支持修改数据库名(如果需要修改库名,建议新建库后迁移数据),核心语法如下:
ALTER DATABASE db_name [alter_spacification [,alter_spacification]...];
-- 其中alter_spacification与创建时一致
[DEFAULT] CHARACTER SET charset_name;
[DEFAULT] COLLATE collation_name; 将mytest数据库的字符集从默认的utf8修改为gbk,并验证修改结果:
-- 修改mytest的字符集为gbk
alter database mytest charset=gbk;
-- 验证修改结果
show create database mytest;修改后结果:
| Database | Create Database |
|----------|-----------------|
| mytest | CREATE DATABASE `mytest` /*!40100 DEFAULT CHARACTER SET gbk */ |删除数据库是高危操作,执行后数据库对应的文件夹会被彻底删除,库内的所有表和数据也会被级联删除,且无法恢复,核心语法如下:
DROP DATABASE [IF EXISTS] db_name;关键提醒:
IF EXISTS:必加!避免删除不存在的数据库时抛出错误;执行结果:
数据是项目的核心资产,无论是开发环境还是生产环境,数据库的备份都是必备操作。MySQL 提供了mysqldump工具实现备份,通过source命令实现恢复,支持单库、单表、多库等多种备份场景,我们逐一讲解。
mysqldump是 MySQL 自带的备份工具,基于命令行执行(需退出 MySQL 连接,在 bash/CMD 中操作),核心语法如下:
# 基础语法:备份单个数据库
mysqldump -P端口号 -u用户名 -p密码 -B 数据库名 > 备份文件存储路径/备份文件名.sql参数说明:
-P:指定 MySQL 的端口号,默认 3306,可省略;-u:指定连接 MySQL 的用户名;-p:指定连接 MySQL 的密码,密码与-p之间无空格;-B:关键参数,用于备份数据库,包含数据库的创建语句;>:重定向符号,将备份的内容写入指定的 sql 文件。 将mytest数据库备份到 D 盘根目录,备份文件名为mytest.sql(MySQL 端口 3306,用户名 root,密码 123456):
# bash/CMD中执行,退出MySQL连接
mysqldump -P3306 -u root -p123456 -B mytest > D:/mytest.sql 备份后的sql文件包含了数据库创建语句、表创建语句、数据插入语句,相当于保存了数据库的完整镜像。
如果不需要备份整个数据库,仅需备份部分表,可在数据库名后指定表名,多个表名用空格分隔:
# 备份mytest数据库中的person表和user表
mysqldump -u root -p123456 mytest person user > D:/mytest_tables.sql 通过-B参数后跟多个数据库名,可实现多库批量备份,适合整库迁移的场景:
# 同时备份mytest、db1、db2三个数据库
mysqldump -u root -p123456 -B mytest db1 db2 > D:/multi_db.sql 恢复数据库需在 MySQL 连接中执行,核心命令是source,通过读取备份的sql文件,自动执行其中的 SQL 语句,实现数据库、表、数据的恢复,语法如下:
-- MySQL中执行,恢复指定备份文件
source 备份文件的绝对路径;-- 登录MySQL后执行
source D:/mytest.sql;这部分是避坑重点,很多小伙伴恢复失败都是因为忽略了这些细节:
-B参数,备份文件中会缺少数据库的创建语句,恢复时需要先手动创建空数据库,并使用use 数据库名;指定数据库,再执行source命令;mysqldump的用户需要有数据库的查询权限,恢复时的用户需要有数据库的创建、插入权限; 在实际开发和运维中,经常会遇到数据库卡顿、响应慢的问题,甚至可能出现数据库被非法入侵的情况,MySQL 提供了show processlist命令,能实时查看当前的数据库连接情况,快速定位问题。
-- 查看当前所有的MySQL连接
show processlist;执行后会返回当前所有的连接信息,核心字段说明:
字段 | 含义 |
|---|---|
Id | 连接的唯一标识 |
User | 连接数据库的用户名 |
Host | 连接的客户端 IP 和端口 |
db | 该连接正在使用的数据库 |
Command | 连接的当前状态(Sleep/Query 等) |
Time | 状态持续的时间(秒) |
State | 连接的详细状态 |
Info | 该连接正在执行的 SQL 语句 |
show processlist后,若发现大量Query状态的连接,且Time数值很大,说明有慢 SQL 正在执行,可通过Info字段查看具体 SQL,进行优化;User和Host字段中有陌生的用户名或非内网的 IP 地址,说明数据库可能被非法入侵,需立即修改数据库密码,关闭高危端口;Sleep状态的连接,且Time数值很大,说明存在大量无效连接,可通过kill 连接Id;命令释放,也可通过配置 MySQL 的超时参数自动释放。示例:杀死 Id 为 2 的无效连接
kill 2;通过以上内容,我们掌握了 MySQL 库的全套操作,最后总结一些实战中的避坑指南和最佳实践,让你的操作更规范、更安全。
MySQL 库的操作是 MySQL 入门的基础,也是后续表、数据、索引操作的前提,本文从创建数据库入手,讲解了字符集和校验规则的核心配置,再到查看、修改、删除的日常操纵,最后重点讲解了备份恢复和连接排查的实战技巧,覆盖了开发和运维中最常用的所有场景。 其实 MySQL 的库操作并不复杂,关键在于把字符集、校验规则、-B 参数这些细节掌握到位,同时养成规范编码、定时备份、谨慎删除的良好习惯。掌握这些内容后,你就能轻松应对日常的数据库管理工作,为后续的 MySQL 进阶学习打下坚实的基础。 后续我会继续更新 MySQL 表的操作、数据的 CRUD、索引优化等内容,关注我,一起从 MySQL 入门到实战!