【MySQL】库的操作

该章节库的操作都是数据定义语言 (DDL),用来维护存储数据的结构,代表指令:create,drop,alter

一. 创建数据库

在此之前需要连接 mysqld 服务器。

xzy@hcss-ecs-b3aa:~$ mysql -uroot -p
CREATE DATABASE [IF NOT EXISTS] db_name 
[[DEFAULT] CHARSET=charset_name] 
[[DEFAULT] COLLATE=collation_name];
  • SQL中大写的表示关键字,[ ]中代表的是可选项。
  • CHARSET用于指定数据库所采用的编码格式。
  • COLLATE用于指定数据库所采用的校验规则。

注意: 如果创建数据库时未指明数据库的编码格式或校验规则,则默认使用 MySQL 配置文件中对应的编码格式或校验规则。

创建数据库案例:

# 编码集的两种写法
create database db1 charset=utf8;
create database db2 character set utf8;

# 校验集的写法
create database db3 collate utf8_general_ci;

# 编码集和校验集的写法
create database db4 charset=utf8 collate utf8_general_ci;

在这里插入图片描述

  • 当我们创建数据库没有指定编码集(字符集)和校验集(校验规则)时。系统使用默认字符集:utf8,校验规则是:utf8_ general_ ci
  • 创建数据库的本质就是在 /var/lib/mysql 路径下创建一个目录。而在 /var/lib/mysql 路径下创建目录,也可以通过 show databases 查看到该数据库,但是不推荐。

二. 数据库的编码集和校验集

  • 编码集:数据库存储数据的编码方式,数据库编码能有效减少数据存储空间,提高存储效率,同时优化数据检索速度。
  • 校验集:它决定了数据库在进行字符比较、排序和搜索时如何解释和处理字符数据,不同的校验集可能对大小写敏感性、重音符号的处理等有不同的规则。本质是一种读取数据库中的数据采用的编码格式。

在数据库中,每种编码集通常都对应着一组可用的校验集。选择特定的编码集后,可以从与该编码集关联的校验集中选择一个作为数据库的校验规则。比如我们存储数据的时候是按照 utf8 的格式进行存储的,那么将来在对数据做比对时也必须按照 utf8 的格式进行比对,因为“存数据”和“取数据”的方式必须保持一致。

1. 查看系统默认编码集和校验集

通过查看 MySQL 系统变量 variables 中的 character_set_database,可以得知系统默认的编码集。

在这里插入图片描述

通过查看 MySQL 系统变量 variables 中的 collation_database,可以得知系统默认的字符集校验规则。

在这里插入图片描述

2. 查看数据库支持的编码集和校验集

使用 show charset 可以查看数据库支持的编码集,如下:

在这里插入图片描述

使用 show collation 可以查看数据库支持的字符集校验规则,如下:

在这里插入图片描述

3. 不同校验集对数据库的影响

create database test1 collate utf8_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'; # 查询

在这里插入图片描述

create database test2 collate utf8_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'; # 查询

在这里插入图片描述

结果:校验集的不同,输出的结果可能不同 (是否区分大小写)

三. 操作数据库

1. 查看数据库

使用 show databases 可以查看系统中所有的数据库,如下:

在这里插入图片描述

  • 使用数据库需要 use db_name 类似进入目录操作。
  • 查看在哪个数据库中,可以使用 select database()

2. 显示创建语句

使用 show create database db_name 可以查看对应数据库的创建语句,如下:

在这里插入图片描述

  • MySQL 建议我们关键字使用大写,但是不是必须的。
  • 数据库名字的反引号,是为了防止使用的数据库名刚好是关键字。
  • /*!40100 default.... */这个不是注释,表示当前mysql版本大于4.01版本,就执行这句话。

3. 修改数据库

ALTER DATABASE db_name 
[[DEFAULT] CHARSET=character_name] 
[[DEFAULT] COLLATE=collation_name];
  • 对数据库的修改主要指的是修改数据库的编码集 (字符集),校验集 (校验规则)

比如将数据库 db1 的字符集修改为 gbk,校验集修改为 gbk_chinese_ci,如下:

在这里插入图片描述

4. 删除数据库

DROP DATABASE [IF EXISTS] db_name;

删除数据库后该数据库对应的文件夹就被删除了,比如:

在这里插入图片描述

执行删除之后的结果:数据库内部看不到对应的数据库,对应的数据库文件夹被删除,级联删除,里面的数据表全部被删。不要随意删除数据库,先备份再删除。

5. 备份和恢复

1. 数据库的备份和恢复

为了演示数据库备份,下面我们创建一个 backup_and_restore 数据库,并在该数据库中创建一张 student 表,如下:

在这里插入图片描述

数据库备份

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

在这里插入图片描述

打开 backup.sql 文件即可看到,文件中的内容实际就是我们在该数据库中执行的各种 SQL 命令,包括创建数据库、创建表、插入数据等 SQL 语句,如下:

在这里插入图片描述

数据库恢复

source 数据库备份文件的路径

为了演示数据库恢复,我们先将刚才创建的数据库删除,如下:

在这里插入图片描述

这时让 MySQL 服务器执行如下命令即可对数据库进行恢复,如下:

在这里插入图片描述

实际恢复数据库的时候就是按顺序执行数据库备份文件中的 SQL 语句,执行完毕后数据库也就恢复出来了,如下:

在这里插入图片描述

同时该数据库下的表,以及表当中的数据也都恢复出来了,如下:

在这里插入图片描述

同时备份多个数据库?

mysqldump -u root -p -B 数据库名1 数据库名2... > 数据库备份存储的文件名

2. 表的备份和恢复

为了演示表的备份,下面我们在 backup_and_restore 数据库下再创建一张 teacher 表,如下:

在这里插入图片描述

表备份

mysqldump -u root -p 数据库名 表名1 表名2... > 表备份存储的文件名

在这里插入图片描述

这时历史上与 student 和 teacher 表相关的 SQL 语句,就会被保存到备份文件当中,如下:

在这里插入图片描述
在这里插入图片描述

表恢复

表恢复之前需要先选中一个数据库,表明需要将表恢复到哪一个数据库中,为了防止恢复出来的表与该数据库中已有的表的表名重复,一般在恢复表时会选择创建一个空的数据库,然后在该数据库中进行表的恢复。

source 表备份文件的路径

为了演示数据库恢复,我们先将刚才创建的 backup_and_restore 数据库删除,再创建一个新的 backup_and_restore 数据库如下:

在这里插入图片描述

这时创建一个空的数据库并在该数据库中执行如下命令即可对表进行恢复,如下:

在这里插入图片描述

当备份文件中的 SQL 语句执行完毕后,该数据库下就恢复出了 student 和 teacher 表,并且表当中的数据也都恢复出来了,如下:

在这里插入图片描述

6. 查看连接情况

使用 show processlist 即可查看当前连接 MySQL 的用户,如下:

在这里插入图片描述

  • Id:一个标识,可以在 MySQL 中通过 kill id 杀死指定 id 的线程。
  • User:显示当前用户,如果不是 root,这个命令就只显示你权限范围内的 SQL 语句
  • Host:显示这个语句是从哪个 IP 的哪个端口上发出的,可用来追踪出问题语句的用户。
  • db:当前执行的命令是在哪一个数据库上,如果没有指定数据库,则该值为 NULL。
  • Command:显示当前连接执行的命令,一般就是休眠 (Sleep)、查询 (Query) 和连接 (Connect)
  • Time:表示该线程处于当前状态的时间,单位是秒。
  • State:显示使用当前连接的 SQL 语句的状态。
  • Info:一般记录的是线程执行的语句,默认只显示前100个字符,如果要看全部信息,需要使用 show full processlist

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值