【MySQL】库的操作

库的操作

  • [一. 创建数据库](#一. 创建数据库)
  • [二. 数据库的编码集和校验集](#二. 数据库的编码集和校验集)
    • [1. 查看系统默认编码集和校验集](#1. 查看系统默认编码集和校验集)
    • [2. 查看数据库支持的编码集和校验集](#2. 查看数据库支持的编码集和校验集)
    • [3. 不同校验集对数据库的影响](#3. 不同校验集对数据库的影响)
  • [三. 操作数据库](#三. 操作数据库)
    • [1. 查看数据库](#1. 查看数据库)
    • [2. 显示创建语句](#2. 显示创建语句)
    • [3. 修改数据库](#3. 修改数据库)
    • [4. 删除数据库](#4. 删除数据库)
    • [5. 备份和恢复](#5. 备份和恢复)
      • [1. 数据库的备份和恢复](#1. 数据库的备份和恢复)
      • [2. 表的备份和恢复](#2. 表的备份和恢复)
    • [6. 查看连接情况](#6. 查看连接情况)

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

一. 创建数据库

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

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

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

创建数据库案例:

sql 复制代码
# 编码集的两种写法
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. 不同校验集对数据库的影响

sql 复制代码
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'; # 查询
sql 复制代码
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. 修改数据库

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

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

4. 删除数据库

sql 复制代码
DROP DATABASE [IF EXISTS] db_name;

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

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

5. 备份和恢复

1. 数据库的备份和恢复

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

数据库备份

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

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

数据库恢复

bash 复制代码
source 数据库备份文件的路径

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

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

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

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

同时备份多个数据库?

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

2. 表的备份和恢复

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

表备份

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

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


表恢复

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

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,如果查出某个用户不是你正常登陆的,很有可能你的数据库被人入侵了。如果发现自己数据库比较慢时,可以用这个指令来查看数据库连接情况。

相关推荐
Exquisite.41 分钟前
企业高性能web服务器(4)
运维·服务器·前端·网络·mysql
知识分享小能手1 小时前
SQL Server 2019入门学习教程,从入门到精通,SQL Server 2019数据库的操作(2)
数据库·学习·sqlserver
爬山算法1 小时前
Hibernate(84)如何在DevOps流程中使用Hibernate?
oracle·hibernate·devops
踩坑小念2 小时前
秒杀场景下如何处理redis扣除状态不一致问题
数据库·redis·分布式·缓存·秒杀
萧曵 丶2 小时前
MySQL 语句书写顺序与执行顺序对比速记表
数据库·mysql
Wiktok3 小时前
MySQL的常用数据类型
数据库·mysql
曹牧3 小时前
Oracle 表闪回(Flashback Table)
数据库·oracle
J_liaty4 小时前
Redis 超详细入门教程:从零基础到实战精通
数据库·redis·缓存
m0_706653234 小时前
用Python批量处理Excel和CSV文件
jvm·数据库·python
山岚的运维笔记4 小时前
SQL Server笔记 -- 第15章:INSERT INTO
java·数据库·笔记·sql·microsoft·sqlserver