MySQL库的操作

目录

库的操作

创建库

创建数据库案例

字符集和校验规则

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

查看数据库支持的字符集

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

校验规则对数据库的影响

操纵数据库

查看数据库

显示创建语句

修改数据库

删除数据库

备份和恢复

查看连接情况


库的操作

创建库

语法:

复制代码
CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [, create_specification] ...]

create_specification:
[DEFAULT] CHARACTER SET charset_name
[DEFAULT] COLLATE collation_name

说明一下:

  • SQL中大写的表示关键字,[ ]中代表的是可选项。
  • CHARSET用于指定数据库所采用的编码格式。
  • COLLATE用于指定数据库所采用的校验规则。

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

创建数据库案例

采用默认的编码格式和校验规则创建数据库,即不特别指明。

创建名为 db1 的数据库,如下:

复制代码
create database db1;

说明:当我们创建数据库没有指定字符集和校验规则时,系统使用默认字符集:utf8,校验规则是:utf8_ general_ ci。

创建一个使用utf8字符集的 db2 数据库

创建数据库时通过charset指明数据库的编码格式即可。如下:

复制代码
create database db2 charset=utf8;

注意: SQL中的charset=utf8,也可以写成character set=utf8或character set utf8。

创建一个使用utf字符集,并带校对规则的 db3 数据库。

复制代码
create database db3 charset=utf8 collate utf8_general_ci;

注意: SQL中的collate=utf8_general_ci,也可以写成collate utf8_general_ci。

字符集和校验规则

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

查看系统默认的字符集

通过查看MySQL系统变量variables中的character_set_database,可以得知系统默认的字符集。如下:

复制代码
show variables like 'character_set_database';

注意: 如果是在指定数据库下使用该SQL,则查看的是该数据库对应的字符集。

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

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

复制代码
show variables like 'collation_database';

注意: 如果是在指定数据库下使用该SQL,则查看的是该数据库对应的字符集校验规则。

查看数据库支持的字符集

我们可以通过show charset命令在SQL中进行查看,如下:

说明一下: 字符集主要是控制用什么语言,比如utf8就可以使用中文。

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

我们可以通过show collation命令在SQL中进行查看,如下:

复制代码
show collation;
校验规则对数据库的影响

字符集校验规则是在字符集内用于比较字符的一套规则,用于对数据进行比对。比方说,日常中我们就认为a在b前面,b在c前面,这就好比类似于比较字符的规则。

因此为了保证读取的数据和存储的数据是一致的,因此字符集编码格式和校验规则必须是对应的。但实际同一中字符集编码格式一般会有多种可选择的校验规则,比如utf8编码格式的校验规则有utf8_general_ci、utf8_bin、utf8_unicode_ci等校验规则。

使用不同的校验规则操作数据库中的数据可能会得到不同的结果,比方说utf8_ general_ ci就是不区分大小写的,其就认为a等于A,b等于B。但utf8_ bin就反过来,其区分大小写,根据ASCII表得知对应小写的ASCII比起大写大32。所以不同的校验规则会对数据库有不同的影响,使用的时候要注意。

操纵数据库

查看数据库

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

复制代码
show databases;
显示创建语句

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

复制代码
show create database database_name;

说明一下:

  • MySQL建议SQL中的关键字使用大写,但不是必须的。
  • 数据库的名字加上反引号,是为了防止使用的数据库名与关键字冲突。
  • /*!80016 DEFAULT ENCRYPTION='N' */不是注释,它表示当前MySQL版本如果大于8.0016,则执行后面的SQL语句。
修改数据库

修改数据库的语法如下:

复制代码
ALTER DATABASE db_name
[alter_spacification [,alter_spacification]...]

alter_spacification:
[DEFAULT] CHARACTER SET charset_name
[DEFAULT] COLLATE collation_name

说明一下:

  • 对数据库的修改主要指的是修改数据库的

    复制代码
    DROP DATABASE [IF EXISTS] db_ name;

    字符集或校验规则。

比如将数据库的字符集改为gbk,并将数据库的校验规则改为gbk_bin。如下:

复制代码
alter database db1 charset=gbk;
删除数据库

删除数据库的语法如下:

复制代码
DROP DATABASE [IF EXISTS] db_ name;

执行删除之后的结果:

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

注意:不要随意删除数据库

备份和恢复

备份

语法:

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

为了演示数据库备份,下面我们在前面创建的db3数据库中创建两个表。如下:

并在两个表中随便插入两条数据

这时在命令行中执行如下命令即可将该数据库进行备份,并指定将备份后产生的文件存放在当前目录下。如下:

复制代码
mysqldump -P3306 -u root -p123456 -B mytest > mytest.sql

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

还原

语法:

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

为了演示数据库恢复,我们先将刚才创建的数据库删除。然后再进行还原。

复制代码
source mytest.sql;

需要注意的就是:确保 mytest.sql 文件在当前工作目录。

因为本人还原时,输入SQL后没有反应,就不贴图了。

注意事项

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

我们就修改SQL即可,指定备份表即可,如果多个就用空格隔开。

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

同时备份多个数据库

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

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

查看连接情况

语法:

复制代码
show processlist;

示例:

说明一下:

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

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

相关推荐
Debroon5 分钟前
Graphiti:Cypher与SQL的“同声传译“,一个让图数据库和关系数据库握手言和的验证器
数据库·sql
西柚小萌新12 分钟前
【计算机常识】--Windows 安装 WSL2 并运行 Ubuntu 22.04
linux·windows·ubuntu
矢鱼13 分钟前
python中对应c++容器的结构
开发语言·c++·python·算法
老蒋新思维17 分钟前
创客匠人:小团队的知识变现革命 —— 超级个体 + 多智能体如何重构组织价值
服务器·网络·人工智能·重构·创始人ip·创客匠人·知识变现
SoleMotive.18 分钟前
redis和mysql有什么区别,以及redis和mysql都有什么缺点,以及什么地方redis不如mysql?
数据库·redis·mysql
代码代码快快显灵19 分钟前
Android跨应用数据共享:ContentProvider详解
jvm·数据库·oracle
qq_3106585121 分钟前
mediasoup源码走读(十一)——consumer
服务器·c++·音视频
埃伊蟹黄面24 分钟前
字符串算法精要与例题汇编
c++·算法·leetcode·字符串
古城小栈24 分钟前
Go mod 忽略指令:解决依赖冲突的核心技巧
网络·golang
福尔摩斯张25 分钟前
基于TCP的FTP文件传输系统设计与实现(超详细)
linux·开发语言·网络·网络协议·tcp/ip·udp