【MySQL】库的操作

目录

创建数据库

数据库编码问题

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

指定创建的数据库的编码集

校验规则对数据库的影响

删除数据库

查看数据库

显示创建语句

修改数据库

库的备份与恢复

备份

恢复

注意事项

查看链接情况


创建数据库

CREATE DATABASE IF NOT EXISTS db_name create_specification \[, create_specification ...]

create_specification:
DEFAULT CHARACTER SET charset_name

DEFAULT COLLATE collation_name

里的是可选项,IF NOT EXISTS就是只有当前数据库不存在时,才去创建

我们现在来创建一个数据库

创建了一个数据库后可以看到就在/var/lib/mysql下创建了一个目录

我们也可以反过来,在/var/lib/mysql下创建一个目录,这样也相当于创建一个数据库。但最后不要这样做。同样的,我们在这个目录里面删除一个目录,数据库中也会少一个数据库。

使用可选项

数据库编码问题

只要是数据,就一定会有编码格式。数据库是与数据打交道的,就一定要有编码集,且存、取时采用的编码集一定是统一的。

创建数据库时有两个编码集

  1. 数据库字符集:数据库未来存储数据、检索数据、显示数据所采用的编码集

  2. 数据库校验集:数据库未来进行字符串比较、排序操作时所采用的编码集

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

在一个数据库中,我们一定要保证这两个编码集是相同的

我们来看一下系统在创建数据库时默认的字符集
可以看到,默认使用的字符集是utf8

再来看看系统在创建数据库时默认的校验集
可以看到,默认使用的校验集也是utf8

我们可以使用show charset来查看一个数据库中支持的字符集及其对应的校验集

之所以我们创建数据库时默认的编码集是utf8,是因为我们在配置文件中已经指定了编码集,当然,我们也可以在创建数据库时自己指定编码集

新建的数据库里默认的文件中是可以看到这个数据库的字符集、校验集

指定创建的数据库的编码集

校验规则对数据库的影响

校验集的一个功能就是进行字符串比较,利用不同校验集的特性,可以来查看校验集对数据库的影响。校验集utf8_general_ci是不区分大小写的,校验集utf8_bin是区分大小写的。另外,数据库中表的编码规则继承于其所在的数据库。

创建两个数据库,校验集分别是utf8_general_ci和utf8_bin

我们现在test1这个数据库中创建一个表,并向这个表中插入一些数据



select是从这个表中查(此时使用的就是校验集),*是指所有的意思,所以会显示这个表中所有的数据

此时可以发现校验集utf8_general_ci是不区分大小写的

再使用同样的方法,在test2这个数据库中创建一个表,并向这个表中插入一些数据

此时可以发现校验集utf8_bin是不区分大小写的

结论:校验集会影响比较

删除数据库

DROP DATABASE IF EXISTS db_ name;

执行删除之后的结果:

数据库内部看不到对应的数据库;

对应的数据库文件夹被删除,级联删除,里面的数据表全部被删

一定不要随意删除数据库

查看数据库

show databases;

也可以show databases();

显示创建语句

show create database 数据库名;

作用是查看创建数据库时的指令

说明:

MySQL 建议我们关键字使用大写,但是不是必须的

数据库名字的反引号``,是为了防止使用的数据库名刚好是关键字

/*!40100 default.... */ 这个不是注释,表示当前mysql版本大于4.01版本,就执行这句话

(也就是说,前面半句是一定执行的,但是后面半句是否执行需要看版本)

修改数据库

ALTER DATABASE db_name

alter_spacification \[,alter_spacification\]...

alter_spacification:
DEFAULT CHARACTER SET charset_name

DEFAULT COLLATE collation_name

对数据库的修改主要指的是修改数据库的字符集,校验规则

select database();是查看自己当前在那个数据库里面

修改后就可通过显示创建语句来查看

库的备份与恢复

备份

备份时最容易想到的是将这个数据库的存储目录直接拷贝一份,这样会有问题,若当前数据库版本是5.7,保存的是从5.0上保存的,可能会出错。并且MySQL是不允许对数据库进行重命名的(因为上层应用都是只认数据库名字的)。所以,需要使用MySQL自带的备份工具来备份。

mysqldump -P3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径

数据库test1中有一个表person,现在对其进行备份

我们使用vim打开备份的文件test1.sql看看

可以看到不仅仅备份了数据,还将所有的有效操作都备份了,这是因为备份时带了-B后,就会把创建数据库的操作也备份过去。

恢复

我们先将数据库test1删掉


注意事项

如果备份的不是整个数据库,而是其中的一张表,怎么做?

mysqldump -u root -p 数据库名 表名1 表名2 > D:/mytest.sql

同时备份多个数据库

mysqldump -u root -p -B 数据库名1 数据库名2 ... > 数据库存放路径

如果备份一个数据库时,没有带上-B参数, 在恢复数据库时,需要先创建空数据库,然后使用数据库,再使用source来还原

查看链接情况

show processlist

可以告诉我们当前有哪些用户连接到我们的MySQL,如果查出某个用户不是你正常登陆的,很有可能你的数据库被人入侵了。以后大家发现自己数据库比较慢时,可以用这个指令来查看数据库连接情况。

相关推荐
SelectDB12 小时前
阶跃星辰基于 SelectDB 构建 PB 级 Agent 可观测平台
大数据·数据库·aigc
这个DBA有点耶13 小时前
GROUP BY优化全解:如何写出既不丢数据又飞快的分组查询
数据库·mysql·架构
掉头发的王富贵16 小时前
【StarRocks】极限十分钟入门StarRocks
数据库·sql·mysql
Nturmoils16 小时前
WHERE 条件别凭习惯写,常用查询先跑一遍
数据库
SamDeepThinking20 小时前
一条UPDATE语句在MySQL 8.0中到底加了几把锁?
后端·mysql·程序员
Databend2 天前
在 AWS 中国峰会逛了一天,我在 Databend 展台看到了 Agent 数据基础设施的新思路
数据库·人工智能·agent
李白客3 天前
KES新版MySQL兼容能力再升级意味着什么?
mysql·国产数据库
ClouGence3 天前
Oracle 数据同步为什么会出现数据不一致?长事务是常被忽略的原因
数据库·后端·oracle
飞将3 天前
从零实现数据库(2)——HashIndex + IndexManager
数据库
Nturmoils4 天前
订单列表慢查询,先看 WHERE、ORDER BY 和 LIMIT
数据库