数据库创建与备份实战指南)
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创建数据库指定字符集 utf8mb4create database if not exists db3 character set utf8mb4;utf8mb4是开发首选字符集支持中文、特殊符号、emoji 表情。名称最大字节支持 emoji推荐程度utf8(mysql)3 字节不支持不推荐utf8mb44 字节支持首选示例 4完整版字符集 校对规则项目最推荐写法create database if not exists db4 character set utf8mb4 collate utf8mb4_general_ci;解释字符集utf8mb4校对规则utf8mb4_general_ci后缀ci case insensitive意思比较字符串不区分大小写a和A判定为相等。补充如果你想要区分大小写可以使用utf8mb4_bincreate 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 namea;查询结果------ | name | ------ | a | | A | ------排序测试select * from person order by name;输出顺序aAbB解释大小写视为相同先放 a 相关再放 b 相关案例 2区分大小写utf8mb4_bincreate 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 namea;查询结果------ | name | ------ | a | ------解释二进制严格匹配只会匹配小写的a大写A不会被查到排序测试select * from person order by name;输出顺序ABab原理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 连接。备份 mysqldumpmysqldump -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只备份库里面某几张表不带 -bmysqldump -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--databasesmysqldump -u root -p -B test1 test1.sql还原不需要手动创建数据库不需要选库方式 1source 方式进入 mysql 客户端里面执行mysql -u root -p source /home/ubuntu/mysqlydm/test1.sql;方式 2命令行管道导入不用进 mysqlmysql -u root -p test1.sql情况 2备份时没有-B单库导出 / 只导出几张表备份示例导出 test1 库里面 student、score 两张表mysqldump -u root -p test1 student score table.sql特点sql 文件没有 create database没有 use只有建表和数据 还原必须三步建库 → 切换到这个库 → 导入方式 1source 写法-- 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