目录
创建数据库
创建数据库的SQL如下:
CREATE DATABASE [IF NOT EXISTS] db_name [[DEFAULT] CHARSET=charset_name] [[DEFAULT] COLLATE=collation_name];
查看数据库的SQL如下:
show databases;
说明:
SQL中大写的是关键字,写SQL时也可以小写,其中[]表示可选项
CHARSET用于指定数据库采用的编码格式
COLLATE用于指定数据库所采用的校验规则
案例:采用默认的编码格式和校验规则创建数据库
注意: 如果没有对MySQL的配置文件进行过修改,则默认的编码格式是utf8,默认的校验规则是utf8_general_ci。
使用以下SQL查看系统默认字符集以及校验规则,variables是MySQL的系统变量。
show variables like 'character_set_database';
show variables like 'collation_database';
查看数据库支持的字符集
使用show charset;
SQL可以查看数据库支持的字符集。如下:
查看数据库支持的字符集校验规则
使用show collation;
SQL可以查看数据库支持的字符集校验规则。如下:
字符集编码格式和字符集校验规则的区别
字符集编码格式和字符集校验规则是关于字符集处理的两个不同概念。
-
字符集编码格式:字符集编码格式是用于将字符映射到二进制数据的方式。在计算机系统中,字符通常以数字编码的形式进行存储和传输。字符集编码格式定义了字符和数字编码之间的对应关系,以及如何将字符编码转换为二进制数据。常见的字符集编码格式包括ASCII、UTF-8、GBK等。不同的编码格式具有不同的字符映射规则和编码方式。
-
字符集校验规则:字符集校验规则是用于验证和校验字符集中的字符的规则。字符集校验规则定义了字符集中每个字符的合法性和有效性,以及如何检查和校验字符集中的字符。常见的字符集校验规则包括校验和算法、奇偶校验等。字符集校验规则可以用于检测和修复数据传输过程中可能出现的错误或损坏。
校验规则对数据库的影响
使用不同的校验规则操作数据库中的数据可能会得到不同的结果,比如utf8_general_ci校验规则在比对数据时是不区分大小写的,而utf8_bin校验规则在对比数据时则是区分大小写的。
体现在查找的时候进行数据比对时是否是区分大小写的。
比如:
创建数据库时指定数据库的校验规则为utf8_bin,数据库的编码格式默认为utf8。
然后进入数据库。
创建person表。
插入数据abc和ABC。
查看person表,再查看person表以name='abc'方式筛选。
create database case_sensitive collate=utf8_bin;
use case_sensitive;
create table person(
name varchar(20)
);
insert into person values('abc');
insert into person values('ABC');
select * from person;
select * from person where name='abc';
如下,可看出查看表中name='abc'
的记录时只会将abc筛选出来,原因是utf8_bin校验规则在进行数据比对时是区分大小写的:
倘若创建数据库时指定数据库的校验规则为utf8_general_ci则是不同的结果:
create database case_insensitive collate=utf8_general_ci;
use case_insensitive;
create table person(
name varchar(20)
);
insert into person values('abc');
insert into person values('ABC');
select * from person;
select * from person where name='abc';
如下,可看出查看表中name='abc'
的记录时只会将abc筛选出来,原因是utf8_general_ci校验规则在进行数据比对时是不区分大小写的:
操作数据库
查看数据库
使用show databases;
SQL可以查看系统中所有的数据库。如下:
显示创建语句
使用show create database 数据库名
SQL可以查看对应数据库的创建语句。如下:
解释说明:
这是一个创建名为
db1
的数据库的SQL语句,并定义了一些选项。
DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci
: 这个选项指定了数据库的默认字符集编码和校对规则。在这个例子中,使用了utf8mb4字符集(支持Unicode字符)和utf8mb4_0900_ai_ci校对规则(不区分大小写、不区分重音符号)。
DEFAULT ENCRYPTION='N'
: 这个选项指定了数据库的默认加密设置。在这个例子中,设置为不使用加密('N'),即数据库中的数据不会被加密存储。综合起来,这个SQL语句是用于创建一个名为
db1
的数据库,并设置了该数据库的默认字符集为utf8mb4,校对规则为utf8mb4_0900_ai_ci,以及默认不使用加密。
修改数据库
使用下面语句修改数据库,修改主要指的是修改数据库的字符集或校验规则。
ALTER DATABASE db_name [[DEFAULT] CHARSET=character_name] [[DEFAULT] COLLATE=collation_name];
比如:
删除数据库
删除数据库的SQL如下:
DROP DATABASE [IF EXISTS] db_name;
删除数据库后,该数据库下的所有表也都会被级联删除
比如:
数据库的备份和恢复
使用如下命令在命令行即可对指定数据库进行备份:
mysqldump -P 端口号 -u 用户名 -p 密码 -B 数据库名1 数据库名2 ... > 数据库备份存储的文件路径
为了演示数据库备份,下面我们创建一个数据库,并在该数据库中创建两个表。
退出数据库在命令行执行命令对数据库备份:
打开back.sql可以看到文件中的内容实际就是我们在该数据库中执行的各种SQL命令,包括创建数据库、创建表、插入数据等SQL语句。如下:
数据库恢复
为了演示数据库恢复,我们先将刚才创建的数据库删除,使用下面命令对指定数据库进行恢复
source 数据库备份存储的文件路径
结果如下, 实际恢复数据库的时候就是按顺序执行数据库备份文件中的SQL语句,执行完毕后数据库也就恢复出来了。
同时数据库中的表也恢复出来了,使用show tables;查看该数据库中的所有表。
表的备份和恢复
使用如下命令即可对指定表进行备份:
mysqldump -P 端口号 -u 用户名 -p 密码 数据库名 表名1 表名2 ... > 表备份存储的文件路径
比如只想备份数据库中的student表和teacher表:
表恢复之前需要先选中一个数据库,表明需要将表恢复到哪一个数据库中,为了防止恢复出来的表与该数据库中已有的表的表名重复,一般在恢复表时会选择创建一个空的数据库,然后在该数据库中进行表的恢复。
在数据库中使用如下命令即可对指定表进行恢复:
source 表备份存储的文件路径
为了演示表恢复,我们先将刚才的数据库删除,再创建新的数据库,进入数据库后恢复表:
可以看见表都恢复到新创建的数据库了。
查看连接情况
使用show processlist;
SQL即可查看当前连接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。
注意:上面还有一个event_scheduler用户:
在MySQL中,
event_scheduler
是一个MySQL系统用户,用于管理并执行MySQL事件调度器(Event Scheduler)的相关任务。事件调度器是MySQL提供的一种功能,用于在指定的时间间隔内自动执行特定的SQL语句或存储过程。这些事件可以被计划为一次性执行,也可以重复执行。
默认情况下,MySQL的
event_scheduler
参数是禁用的(OFF
),需要手动启用。当你启用event_scheduler
后,MySQL将创建一个名为event_scheduler
的系统用户来管理和处理相关的事件调度任务。请注意,
event_scheduler
用户不是普通的MySQL用户,不能用于登录和执行SQL语句。它是由MySQL系统自动创建和管理的用户,用于内部任务调度和执行。