
前言
刚接触 MySQL 的开发者,大多会直接上手建表写 SQL,却忽略数据库库层面的基础操作。数据库作为数据表 、视图 、存储过程 等对象的容器,字符集配置、库的增删改查、数据备份恢复都会直接影响项目中文乱码 、数据丢失 、查询排序异常 等线上问题。本文结合实操命令,完整梳理 MySQL 数据库全流程操作,从创建库、字符集校验规则,到修改删除、备份还原、连接查看,覆盖开发运维日常全部高频场景。

1.数据库的操作
1.创建数据库
语法:
sql
CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [,
create_specification] ...]
create_specification:
[DEFAULT] CHARACTER SET charset_name
[DEFAULT] COLLATE collation_name
说明
- 大写的表示关键字
- 是可选项
- CHARACTER SET: 指定数据库采用的字符集
- COLLATE: 指定数据库字符集的校验规则
1.最简创建
sql
create database 数据库名;

2.兼容安全写法,不存在再创建
sql
create database if not exists 数据库名;

出现 1 条警告,原因:test2 这个数据库早就已经存在了。
3.创建时指定字符集与校验规则(解决中文乱码核心用法)
sql
create database db3 charset=utf8mb3 collate utf8_general_ci;
CHARSET (字符集)
COLLATE (排序规则/校对规则)

说明:当我们创建数据库没有指定字符集和校验规则时,系统使用默认字符集:utf8,校验规则是:utf8_general_ci
2.查看数据库
1.查看内容
sql
show databases;

如果在数据库中创建了表,还可以:
sql
use 数据库名;
show tables;//查看表里面的内容

sql
desc person;//查看详细内容

2.查看当前在哪一个数据库中
sql
select database();

3.显示创建语句
sql
show create database 数据库名;
4.查看数据库连接情况
sql
show processlist;
该操作可以查询当前所有连接到MySQL的用户,如果排查发现存在非自身正常登录的陌生用户,大概率说明数据库已经被入侵。后续如果遇到数据库运行卡顿的场景,也可以通过这条指令来查看数据库的实时连接状态,辅助定位性能问题。
3.修改数据库
说明:
- 对数据库的修改主要指的是修改数据库的字符集,校验规则
语法:
sql
ALTER DATABASE db_name
[alter_spacification [,alter_spacification]...]
alter_spacification:
[DEFAULT] CHARACTER SET charset_name
[DEFAULT] COLLATE collation_name
sql
alter database tets2 charset=gbk collate gbk_chinese_ci;
为什么不建议轻易修改数据库?
数据库的修改主要指对其字符集、校验规则进行调整,这类操作不建议轻易执行,因为随意变更不仅可能引发不可逆的数据乱码 、丢失问题 ,还会破坏多表关联的业务数据一致性 ,导致上层依赖的应用、报表出现兼容性故障,甚至引发数据库服务崩溃 ,同时还会大幅提升后续运维排查的难度,带来额外的安全隐患,整体改动成本极高。
4.删除数据库
sql
drop database 数据库名;
5.数据库的备份与恢复
直接拷贝数据库文件极易产生脏数据、损坏数据表,InnoDB 引擎文件绑定实例 ID,跨机器 / 版本拷贝大概率无法使用,还无法同步权限、存储过程等对象,一致性与兼容性都很差,远不如官方备份工具可靠,因此不推荐。
1.备份
语法
sql
mysqldump -P3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径;
示例:将test1库备份到文件(先退出数据库)
sql
mysqldump -P3306 -u root -p -B test1 > test1.sql

如果备份的不是整个数据库,而是其中的一张表,怎么做?
对应操作命令:
如果备份的不是整个数据库,而是其中的一张表 ,怎么做?
对应操作命令:
sql
mysqldump -u root -p 数据库名 表名1 表名2 > D:/mytest.sql(存放路径)
2.恢复
sql
source 备份文件的路径;

2.字符集和校验规则
字符集和校验集是数据库处理文字的基础规则 。字符集 (如 utf8mb4)定义了数据的"存储标准 ",决定了能存哪些字(比如是否支持 Emoji)以及底层编码方式;而校验集 (如 _unicode_ci)定义了数据的"比较与排序规则 ",决定了搜索时是否区分大小写、多语言如何排列等逻辑。简单来说,字符集解决的是**"能不能存"** 的问题,校验集解决的是**"怎么比对"**的问题,两者配合才能确保数据存得进、查得准。
1.查看数据库支持的字符集
sql
show charset;

2.查看数据库支持的字符集校验规则
sql
show collation;

字符集校验规则远多于字符集,所以不一样的字符集 校验集匹配方式 会有不一样的效果
3.查看系统默认字符集以及校验规则
sql
//字符集
show variables like 'character_set_database';
//字符集校验规则
show variables like 'collation_database';

4.校验规则对数据库的影响
1.不区分大小写
创建一个数据库,校验规则使用 utf8_general_ci 不区分大小写
sql
-- 创建一个名为 test1 的数据库,并设置字符集排序规则为 utf8_general_ci(不区分大小写)
create database test1 collate utf8_general_ci;
-- 切换到名为 test1 的数据库,后续操作将在该数据库中进行
use test1;
-- 在 test1 数据库中创建一张名为 person 的表,包含一个名为 name 的字段,类型为 varchar(20),最大长度 20 个字符
create table person(name varchar(20));
-- 向 person 表中插入一条记录:name 值为小写字母 'a'
insert into person values('a');
-- 向 person 表中插入一条记录:name 值为大写字母 'A'
insert into person values('A');
-- 向 person 表中插入一条记录:name 值为小写字母 'b'
insert into person values('b');
-- 向 person 表中插入一条记录:name 值为大写字母 'B'
insert into person values('B');
sql
select * from person;// 查看数据
1.查找
sql
//进行查找
use test1;
select * from person where name='a';

2.排序
sql
select * from person order by name;

2.区分大小写
创建一个数据库,校验规则使用 utf8_bin 区分大小写
sql
//同上
create database test1 collate utf8_general_ci;
use test1;
create table person(name varchar(20));
insert into person values('a');
insert into person values('A');
insert into person values('b');
insert into person values('B');
sql
select * from person;// 查看数据

1.查找
sql
//进行查找
use test2;
select * from person where name='a';

2.排序
sql
select * from person order by name;



