【MySQL】第二节—库的操作 | 详解

Hi,好久不见,我是云边有个稻草人,偶尔中二的博主与你分享专业知识!#(*^▽^*)#,好久没更了...继续加油!

《MySQL》本篇文章所属专栏---持续更新中---欢迎订阅!

目录

一、库的操作

1、创建数据库

2、创建数据库案例

3、字符集和校验规则

(1)查看系统默认字符集以及校验规则

(2)查看数据库支持的字符集

(3)查看数据库支持的字符集校验规则

(4)校验规则对数据库的影响

4、操纵数据库

(1)查看数据库

(2)使用数据库

(3)查看自己当前在哪个数据库

(4)显示创建语句

(3)修改数据库

(4)数据库删除

[(5)备份和恢复 -- 放在最后](#(5)备份和恢复 -- 放在最后)

(6)查看连接情况

二、细节理解

1、tip

[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

创建数据库的时候,有两个编码集:

  1. 数据库编码集:数据库未来存储数据
  2. 数据库校验集:支持数据库,进行字段比较使用的编码,本质也是一种读取数据库中数据的采用的编码格式

数据库无论对数据做任何操作,都必须保证操作和编码必须是 编码一致的!

  • 创建一个使用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 的文件。

这个文件的内容非常简单,通常只有两行,例如:

sql 复制代码
default-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数据库级别的配置文件 。它们之间是全局与局部的关系:

  1. 全局配置 (my.cnf)

    • [mysqld] 部分设置的 character-set-servercollation-server 定义了整个 MySQL 服务器的默认字符集。
    • 这个设置会影响所有新创建的数据库,作为它们的初始默认值。
  2. 局部配置 (db.opt)

    • 每个数据库都可以有自己的 db.opt 文件,它定义了该数据库自身的默认字符集。
    • 它的优先级高于 全局配置。也就是说,当你在这个数据库里创建表时,MySQL 会优先使用 db.opt 里的设置,而不是 my.cnf 里的全局设置。

总结一下优先级顺序(从高到低):

  1. 表级设置 :创建表时在 CREATE TABLE 语句中明确指定的字符集。
  2. 数据库级设置 :数据库目录下 db.opt 文件中定义的字符集。
  3. 服务器级设置my.cnf (或 my.ini) 文件中 [mysqld] 部分定义的全局字符集。

虽然 db.opt 是一个文本文件,理论上你可以直接编辑它,但强烈不推荐这样做。直接修改文件可能会导致 MySQL 读取配置时出现问题,尤其是在数据库正在运行时。

正确的方法是使用 SQL 命令 ALTER DATABASE ,这会自动更新 db.opt 文件的内容,并且是原子和安全的。

例如,要将 your_database_name 数据库的默认字符集修改为 utf8mb4,你应该执行:

sql 复制代码
ALTER DATABASE your_database_name
CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;
3、在 mysqldump 命令中,-B(或 --databases)的核心作用

mysqldump 命令中,-B(或 --databases)的核心作用是指定要备份的数据库列表 ,并在备份文件中自动添加 CREATE DATABASEUSE 语句。

(1)具体作用分为两点:

  1. 明确指定数据库 :当需要备份一个或多个数据库时,-B 后面直接跟数据库名(多个数据库用空格分隔),例如:

    复制代码
    mysqldump -u root -p -B db1 db2 > backup.sql

    这会同时备份 db1db2 两个数据库。

  2. 备份文件包含数据库创建语句 :备份文件中会自动添加 CREATE DATABASE IF NOT EXISTS 数据库名;USE 数据库名; 语句。这样在恢复数据时,不需要手动创建数据库,直接执行备份文件即可自动创建并切换到对应的数据库,例如:

    复制代码
    mysql -u root -p < backup.sql

(2)对比:不加 -B 的情况

如果不加 -B,直接写 mysqldump -u root -p 数据库名 > backup.sql

  • 备份文件不会包含 CREATE DATABASEUSE 语句
  • 恢复时需要先手动创建数据库并切换到该库,否则会报错。

完------


以前其实不怎么喜欢读书的,感觉枯燥,感觉看电影更有趣

前段时间买了几本书,从《小王子》开始,之后《追风筝的人》《灿烂千阳》....渐渐地...

《我们好像在哪见过》

至此结束------

我是云边有个稻草人

期待与你的下一次相遇------

相关推荐
YFLICKERH1 小时前
【数据包】Sql Server 数据库TDS协议抓包
数据库·协议
张较瘦_1 小时前
数据库 | MySQL表管理与增删改查:从入门到实践
数据库·mysql
q***42051 小时前
Redis如何设置密码
数据库·redis·缓存
字节数据平台2 小时前
火山引擎多模态数据湖,破解智能驾驶数据处理瓶颈
数据库
e***U8202 小时前
SQL在数据迁移中的脚本编写
数据库·sql
Andrew_Ryan2 小时前
达梦 数据库 Rust 实战
数据库·rust·数据分析
2***B4492 小时前
MySQL环境
数据库·mysql
CIANTECH_Heidi3 小时前
精准配置重构光模块成本效能:深圳光特通信1X9、SFP单收/单发光模块
运维·服务器·网络·数据库·光模块
工具人55553 小时前
下载文件wget
数据库·redis·缓存