前言
刚接触 MySQL 的开发者,大多会直接上手建表写 SQL,却忽略数据库库层面的基础操作。数据库作为数据表、视图、存储过程等对象的容器,字符集配置、库的增删改查、数据备份恢复都会直接影响项目中文乱码、数据丢失、查询排序异常等线上问题。本文结合实操命令,完整梳理 MySQL 数据库全流程操作,从创建库、字符集校验规则,到修改删除、备份还原、连接查看,覆盖开发运维日常全部高频场景。
1.数据库的操作
1.创建数据库
语法:
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.最简创建
create database 数据库名;2.兼容安全写法,不存在再创建
create database if not exists 数据库名;出现 1 条警告,原因:test2 这个数据库早就已经存在了。
3.创建时指定字符集与校验规则(解决中文乱码核心用法)
create database db3 charset=utf8mb3 collate utf8_general_ci;CHARSET(字符集)
COLLATE(排序规则/校对规则)
说明:当我们创建数据库没有指定字符集和校验规则时,系统使用默认字符集:utf8,校验规则是:utf8_general_ci
2.查看数据库
1.查看内容
show databases;如果在数据库中创建了表,还可以:
use 数据库名; show tables;//查看表里面的内容desc person;//查看详细内容2.查看当前在哪一个数据库中
select database();3.显示创建语句
show create database 数据库名;4.查看数据库连接情况
show processlist;该操作可以查询当前所有连接到MySQL的用户,如果排查发现存在非自身正常登录的陌生用户,大概率说明数据库已经被入侵。后续如果遇到数据库运行卡顿的场景,也可以通过这条指令来查看数据库的实时连接状态,辅助定位性能问题。
3.修改数据库
说明:
- 对数据库的修改主要指的是修改数据库的字符集,校验规则
语法:
ALTER DATABASE db_name [alter_spacification [,alter_spacification]...] alter_spacification: [DEFAULT] CHARACTER SET charset_name [DEFAULT] COLLATE collation_namealter database tets2 charset=gbk collate gbk_chinese_ci;为什么不建议轻易修改数据库?
数据库的修改主要指对其字符集、校验规则进行调整,这类操作不建议轻易执行,因为随意变更不仅可能引发不可逆的数据乱码、丢失问题,还会破坏多表关联的业务数据一致性,导致上层依赖的应用、报表出现兼容性故障,甚至引发数据库服务崩溃,同时还会大幅提升后续运维排查的难度,带来额外的安全隐患,整体改动成本极高。
4.删除数据库
drop database 数据库名;5.数据库的备份与恢复
直接拷贝数据库文件极易产生脏数据、损坏数据表,InnoDB 引擎文件绑定实例 ID,跨机器 / 版本拷贝大概率无法使用,还无法同步权限、存储过程等对象,一致性与兼容性都很差,远不如官方备份工具可靠,因此不推荐。
1.备份
语法
mysqldump -P3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径;示例:将test1库备份到文件(先退出数据库)
mysqldump -P3306 -u root -p -B test1 > test1.sql如果备份的不是整个数据库,而是其中的一张表,怎么做?
对应操作命令:
如果备份的不是整个数据库,而是其中的一张表,怎么做?
对应操作命令:
mysqldump -u root -p 数据库名 表名1 表名2 > D:/mytest.sql(存放路径)2.恢复
source 备份文件的路径;2.字符集和校验规则
字符集和校验集是数据库处理文字的基础规则。字符集(如 utf8mb4)定义了数据的“存储标准”,决定了能存哪些字(比如是否支持 Emoji)以及底层编码方式;而校验集(如 _unicode_ci)定义了数据的“比较与排序规则”,决定了搜索时是否区分大小写、多语言如何排列等逻辑。简单来说,字符集解决的是“能不能存”的问题,校验集解决的是“怎么比对”的问题,两者配合才能确保数据存得进、查得准。
1.查看数据库支持的字符集
show charset;2.查看数据库支持的字符集校验规则
show collation;字符集校验规则远多于字符集,所以不一样的字符集 校验集匹配方式 会有不一样的效果
3.查看系统默认字符集以及校验规则
//字符集 show variables like 'character_set_database'; //字符集校验规则 show variables like 'collation_database';4.校验规则对数据库的影响
1.不区分大小写
创建一个数据库,校验规则使用utf8_general_ci [不区分大小写]
-- 创建一个名为 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');select * from person;// 查看数据1.查找
//进行查找 use test1; select * from person where name='a';2.排序
select * from person order by name;2.区分大小写
创建一个数据库,校验规则使用utf8_bin [区分大小写]
//同上 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');select * from person;// 查看数据1.查找
//进行查找 use test2; select * from person where name='a';2.排序
select * from person order by name;