Hi,好久不见,我是云边有个稻草人,偶尔中二的博主与你分享专业知识!#(*^▽^*)#,好久没更了...继续加油!
《MySQL》本篇文章所属专栏---持续更新中---欢迎订阅!

目录
[(5)备份和恢复 -- 放在最后](#(5)备份和恢复 -- 放在最后)
[2、【关于 db.opt 】](#2、【关于 db.opt 】)
[3、在 mysqldump 命令中,-B(或 --databases)的核心作用](#3、在 mysqldump 命令中,-B(或 --databases)的核心作用)
正文开始------
一、库的操作
首先你可以再打开一个Linux机器,然后 cd /var/lib/mysql 。 创建一个数据库本质就是在 /var/lib/mysql 下创建一个目录,我们先 cd /var/lib/mysql 就可以更加直观地在Linux目录下看数据库的创建等操作

1、创建数据库
本质就是在 /var/lib/mysql 创建一个目录(根据自己的实际情况查看对应的路径)
语法:
sql
CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [,create_specification] ...]
create_specification:
[DEFAULT] CHARACTER SET charset_name
[DEFAULT] COLLATE collation_name
说明:
- 大写的表示关键字
-
\] 是可选项
- COLLATE:指定数据库字符集的校验规则
注意:绝对不可以通过在Linux下添加目录的方式来创建数据库
2、创建数据库案例
- 创建名为 db1 的数据库
sql
create database database1;


说明:当我们创建数据库没有指定字符集和校验规则时,系统使用 默认字符集:utf8,校验规则:utf8_ general_ ci
创建数据库的时候,有两个编码集:
- 数据库编码集:数据库未来存储数据
- 数据库校验集:支持数据库,进行字段比较使用的编码,本质也是一种读取数据库中数据的采用的编码格式
数据库无论对数据做任何操作,都必须保证操作和编码必须是 编码一致的!
- 创建一个使用utf8字符集的 db2 数据库,有两种方式:
sql
create database db2 charset=utf8;
sql
create database db3 character set utf8;
- 创建一个使用 utf 字符集,并带校对规则的 db3 数据库。
sql
create database db3 charset=utf8 collate utf8_general_ci;
3、字符集和校验规则
(1)查看系统默认字符集以及校验规则
sql
show variables like 'character_set_database';
show variables like 'collation_database';
(2)查看数据库支持的字符集
sql
show charset;
字符集主要是控制用什么语言。比如utf8就可以使用中文。

(3)查看数据库支持的字符集校验规则
sql
show collation;
(4)校验规则对数据库的影响
- 不区分大小写
创建一个数据库,校验规则使用 utf8_ general_ ci [不区分大小写]
sql
create database test1 collate utf8_general_ci;
sql
use test1;
sql
create table person(name varchar(20));
sql
insert into person values('a');
insert into person values('A');
insert into person values('b');
insert into person values('B');
- 区分大小写
创建一个数据库,校验规则使用utf8_ bin[区分大小写]
sql
create database test2 collate utf8_bin;
sql
use test2
sql
create table person(name varchar(20));
- 进行查询
不区分大小写的查询以及结果
sql
mysql> use test1;
mysql> select * from person where name='a';
+------+
| name |
+------+
| a |
| A |
+------+
2 rows in set (0.01 sec)
区分大小写的查询以及结果
sql
mysql> use test2;
mysql> select * from person where name='a';
+------+
| name |
+------+
| a |
+------+
2 rows in set (0.01 sec)
- 结果排序
不区分大小写排序以及结果:
sql
mysql> use test1;
mysql> select * from person order by name;
+------+
| name |
+------+
| a |
| A |
| b |
| B |
+------+
区分大小写排序以及结果:
sql
mysql> use test2;
mysql> select * from person order by name;
+------+
| name |
+------+
| A |
| B |
| a |
| b |
+------+
4、操纵数据库
(1)查看数据库
sql
show databases;
(2)使用数据库
sql
use 数据库名
(3)查看自己当前在哪个数据库

(4)显示创建语句
sql
show create database 数据库名;
示例:

说明:
- MySQL 建议我们关键字使用大写,但是不是必须的。
- 数据库名字的反引号``,是为了防止使用的数据库名刚好是关键字
- /*!40100 default.... */ 这个不是注释,表示当前mysql版本大于4.01版本,就执行这句话
(3)修改数据库
语法:
sql
ALTER DATABASE db_name
[alter_spacification [,alter_spacification]...]
alter_spacification:
[DEFAULT] CHARACTER SET charset_name
[DEFAULT] COLLATE collation_name
说明:
- 对数据库的修改主要指的是修改数据库的字符集,校验规则
实例: 将 test1 数据库字符集改成 gbk

(4)数据库删除
本质:删除目录
sql
DROP DATABASE [IF EXISTS] db_ name;
执行删除之后的结果:
- 数据库内部看不到对应的数据库
- 对应的数据库文件夹被删除,级联删除,里面的数据表全部被删
注意:不要随意删除数据库
(5)备份和恢复 -- 放在最后
备份:将原数据库的操作和数据全都备份到指定文件,还原的时候是将原数据库的操作和数据全都执行一遍
语法:
sql
# mysqldump -P3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径
示例:将 test1 库备份到文件(退出连接)

这时,可以打开看看 test1.sql 文件里的内容,其实把我们整个创建数据库,建表,导入数据的语句 都装载这个文件中。
还原
sql
mysql> source 所备份数据库存在的路径

注意事项
- 如果备份的不是整个数据库,而是其中的一张表,怎么做?
sql
# mysqldump -u root -p 数据库名 表名1 表名2 > D:/mytest.sql
- 同时备份多个数据库
sql
# mysqldump -u root -p -B 数据库名1 数据库名2 ... > 数据库存放路径
- 如果备份一个数据库时,没有带上-B参数, 在恢复数据库时,需要先创建空数据库,然后使用数据 库,再使用source来还原。
(6)查看连接情况
语法:
sql
show processlist
示例:

可以告诉我们当前有哪些用户连接到我们的MySQL,如果查出某个用户不是你正常登陆的,很有可能你 的数据库被人入侵了。以后大家发现自己数据库比较慢时,可以用这个指令来查看数据库连接情况。
二、细节理解
1、tip
- /var/lib/mysql 是创建的每个数据库所在的路径;
2、【关于 db.opt 】
db.opt是 MySQL 数据库中一个非常特殊的隐藏文件,它用于存储某个特定数据库的默认字符集和校验规则。1. db.opt 文件的作用
当你创建一个数据库时,MySQL 会在该数据库对应的存储目录(通常是
/var/lib/mysql/数据库名/)下自动创建一个名为db.opt的文件。这个文件的内容非常简单,通常只有两行,例如:
sqldefault-character-set=utf8mb4 default-collation=utf8mb4_unicode_ci它的作用是:为这个特定的数据库设置默认的字符集和校验集 。当你在这个数据库中创建新表,而没有明确指定字符集和校验集时,MySQL 就会使用
db.opt文件中定义的默认值。2. 它与 my.cnf 配置文件的关系
my.cnf(或my.ini) 是 MySQL 的全局配置文件 ,my.cnf 在 /etc/my.cnf ,而db.opt是数据库级别的配置文件 。它们之间是全局与局部的关系:
全局配置 (
my.cnf):
- 在
[mysqld]部分设置的character-set-server和collation-server定义了整个 MySQL 服务器的默认字符集。- 这个设置会影响所有新创建的数据库,作为它们的初始默认值。
局部配置 (
db.opt):
- 每个数据库都可以有自己的
db.opt文件,它定义了该数据库自身的默认字符集。- 它的优先级高于 全局配置。也就是说,当你在这个数据库里创建表时,MySQL 会优先使用
db.opt里的设置,而不是my.cnf里的全局设置。总结一下优先级顺序(从高到低):
- 表级设置 :创建表时在
CREATE TABLE语句中明确指定的字符集。- 数据库级设置 :数据库目录下
db.opt文件中定义的字符集。- 服务器级设置 :
my.cnf(或my.ini) 文件中[mysqld]部分定义的全局字符集。虽然
db.opt是一个文本文件,理论上你可以直接编辑它,但强烈不推荐这样做。直接修改文件可能会导致 MySQL 读取配置时出现问题,尤其是在数据库正在运行时。正确的方法是使用 SQL 命令
ALTER DATABASE,这会自动更新db.opt文件的内容,并且是原子和安全的。例如,要将
your_database_name数据库的默认字符集修改为utf8mb4,你应该执行:
sqlALTER DATABASE your_database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
3、在 mysqldump 命令中,-B(或 --databases)的核心作用
在 mysqldump 命令中,-B(或 --databases)的核心作用是指定要备份的数据库列表 ,并在备份文件中自动添加 CREATE DATABASE 和 USE 语句。
(1)具体作用分为两点:
-
明确指定数据库 :当需要备份一个或多个数据库时,
-B后面直接跟数据库名(多个数据库用空格分隔),例如:mysqldump -u root -p -B db1 db2 > backup.sql这会同时备份
db1和db2两个数据库。 -
备份文件包含数据库创建语句 :备份文件中会自动添加
CREATE DATABASE IF NOT EXISTS 数据库名;和USE 数据库名;语句。这样在恢复数据时,不需要手动创建数据库,直接执行备份文件即可自动创建并切换到对应的数据库,例如:mysql -u root -p < backup.sql
(2)对比:不加 -B 的情况
如果不加 -B,直接写 mysqldump -u root -p 数据库名 > backup.sql:
- 备份文件不会包含
CREATE DATABASE和USE语句; - 恢复时需要先手动创建数据库并切换到该库,否则会报错。
完------
以前其实不怎么喜欢读书的,感觉枯燥,感觉看电影更有趣
前段时间买了几本书,从《小王子》开始,之后《追风筝的人》《灿烂千阳》....渐渐地...

至此结束------
我是云边有个稻草人
期待与你的下一次相遇------