🔥keyipatience:个人主页
🎬作者简介:C/C++后端开发学习者
🌟专栏传送门:《c++》《linux》《c++高阶数据结构》《c++数据结构与算法》《前端学习》
《Git》《Mysql》
⭐️patience is key in life
创建数据库
create database [if not exists] 库名 [character set 字符集] [collate 校对规则];[]包裹的内容代表可选,可以写,也可以省略if not exists:判断,如果同名数据库不存在才创建;库已经存在时不会抛出错误,写脚本、初始化项目强烈建议带上character set(简写charset):字符集,决定数据库可以存储哪些文字符号collate:校对规则,决定字符串怎么对比、怎么排序,比如是否区分英文字母大小写
示例 1:最简创建数据库(不指定字符集、校对规则)
create database db1; //解释:创建名为 `db1` 的数据库。 缺点:没有指定字符集,会使用 mysql 服务的默认字符集,不同版本默认值不一样,容易出现中文乱码,**实际开发不推荐**。示例 2:带上 if not exists,避免重复创建报错
create database if not exists db2;判断,没有 db2 就新建;已经有 db2,则不执行任何操作,不会报错。
示例 3:创建数据库,指定字符集 utf8mb4
create database if not exists db3 character set utf8mb4;utf8mb4是开发首选字符集,支持中文、特殊符号、emoji 表情。
| 名称 | 最大字节 | 支持 emoji | 推荐程度 |
|---|---|---|---|
| utf8(mysql) | 3 字节 | 不支持 | 不推荐 |
| utf8mb4 | 4 字节 | 支持 | 首选 |
示例 4:完整版(字符集 + 校对规则,项目最推荐写法)
create database if not exists db4 character set utf8mb4 collate utf8mb4_general_ci;解释:
- 字符集:
utf8mb4 - 校对规则:
utf8mb4_general_ci- 后缀
ci= case insensitive,意思:比较字符串不区分大小写,a和A判定为相等。
- 后缀
补充:如果你想要区分大小写,可以使用utf8mb4_bin
create database if not exists db5 character set utf8mb4 collate utf8mb4_bin;案例 1:不区分大小写(utf8mb4_general_ci)
-- 创建数据库,指定校对规则 create database if not exists test1 character set utf8mb4 collate utf8mb4_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 where name='a';查询结果:
+------+ | name | +------+ | a | | A | +------+排序测试
select * from person order by name;输出顺序:a,A,b,B解释:大小写视为相同,先放 a 相关,再放 b 相关
案例 2:区分大小写(utf8mb4_bin)
create database if not exists test2 character set utf8mb4 collate utf8mb4_bin; use test2; 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 where name='a';查询结果:
+------+ | name | +------+ | a | +------+解释:二进制严格匹配,只会匹配小写的a,大写A不会被查到
排序测试
select * from person order by name;输出顺序:A,B,a,b原理:ascii 码大写字母编码数字更小,排在前面
查看数据库
查询当前服务器上所有数据库
show databases;查看某个数据库的详细创建信息
show create database db4;作用:可以看到这个数据库当前使用的字符集、校对规则。
查看当前处于哪一个数据库
select database();查看 MySQL 当前所有正在连接、正在执行的会话(连接进程),排查慢查询、异常连接、卡死、可疑登录。
show processlist;修改数据库(修改字符集、校对规则)
只能修改字符集和校对规则,不能修改数据库名字!!数据库的名字不能轻易改动
alter database db4 character set utf8mb4 collate utf8mb4_general_ci;切换数据库(进入数据库)
想要操作库里面的表,必须先切换到这个数据库
use db4;删除数据库
高危操作!删除之后,库里面所有表、全部数据都会直接消失,无法恢复!
drop database if exists db1; //`if exists`:只有数据库存在才删除,不存在也不会报错。数据库备份与恢复
前提:mysqldump是 mysql 自带的备份工具,在系统命令行执行,不是在 mysql 内部命令行,要先退出 mysql 连接。
备份 mysqldump
mysqldump -P端口号 -u用户名 -p密码 -b 数据库名 > 备份文件路径-P3306:指定端口,默认 3306,端口是 3306 时可以省略-u root:登录用户名-p123456:登录密码(p和密码之间不要空格;也可以只写-p,回车后再输入密码,更安全,不会明文显示密码)-b(也就是--databases):带上这个参数,备份文件里自带 create database + use 语句,恢复的时候不用手动先建库>:重定向符号,把导出的 sql 内容写入文件
示例 1:备份单个数据库(带 -b,推荐写法)
mysqldump -p3306 -u root -p123456 -b mytest > d:/mytest.sql导出后的mytest.sql里面包含:建库、建表、插入数据的全部 sql 语句。
示例 2:只备份库里面某几张表(不带 -b)
mysqldump -u root -p123456 mytest user student > d:/table_backup.sql这种写法没有建库语句,恢复前必须自己先建好数据库,并且use切换进去。
示例 3:一次性备份多个数据库
mysqldump -u root -p123456 -b db1 db2 db3 > d:/multi_db.sql数据还原
情况 1:备份时加了-B(--databases)
mysqldump -u root -p -B test1 > test1.sql还原不需要手动创建数据库,不需要选库
方式 1:source 方式(进入 mysql 客户端里面执行)
mysql -u root -p source /home/ubuntu/mysqlydm/test1.sql;方式 2:命令行管道导入(不用进 mysql)
mysql -u root -p < test1.sql情况 2:备份时没有-B(单库导出 / 只导出几张表)
备份示例(导出 test1 库里面 student、score 两张表)
mysqldump -u root -p test1 student score > table.sql特点:sql 文件没有 create database,没有 use,只有建表和数据 还原必须三步:建库 → 切换到这个库 → 导入
方式 1:source 写法
-- 1. 手动创建数据库(字符集最好和原来一致 utf8mb4) create database test1 character set utf8mb4 collate utf8mb4_unicode_ci; -- 2. 使用这个数据库 use test1; -- 3. 执行还原 source /home/ubuntu/mysqlydm/table.sql;方式 2:命令行管道导入(必须在命令指定库名)
mysql -u root -p test1 < table.sql这里末尾的
test1就是指定导入到哪个库里,等价于use test1