MySQL库的操作

目录

创建数据库

创建数据库的SQL如下:

cpp 复制代码
CREATE DATABASE [IF NOT EXISTS] db_name [[DEFAULT] CHARSET=charset_name] [[DEFAULT] COLLATE=collation_name];

说明:

  • 大写的表示关键字;
  • \[\] 是可选项;
  • CHARACTER SET:指定数据库采用的字符集;
  • COLLATE:指定数据库字符集的校验规则。

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

创建数据库案例

创建名为 db1 的数据库

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

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

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

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

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

字符集和校验规则

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

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

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

查看数据库支持的字符集

使用 show charset 可以查看数据库支持的字符集。

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

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

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

校验规则对数据库的影响

字符集编码格式和字符集校验规则的区别

  • 字符集编码格式指的是在存储数据时各个字符的底层编码,用于指定数据的存储格式。
  • 字符集校验规则是在字符集内用于比较字符的一套规则,用于对数据进行比对。

比如我们存储数据的时候是按照utf8的格式进行存储的,那么将来在对数据做比对时也必须按照utf8的格式进行比对,因为"存数据"和"取数据"的方式必须保持一致。

在对数据库当中的数据进行增删查改时,不可避免的需要进行数据的比对,因为在对数据做增删查改之前,都需要先通过比对的方式找到目标数据。

校验规则对数据库的影响

我们知道,字符集编码格式和校验规则必须是对应的。但实际同一中字符集编码格式一般会有多种可选择的校验规则,比如utf8编码格式的校验规则有utf8_general_ci、utf8_bin、utf8_unicode_ci等校验规则。

使用不同的校验规则操作数据库中的数据可能会得到不同的结果,比如utf8_general_ci校验规则在比对数据时是不区分大小写的,而utf8_bin校验规则在对比数据时则是区分大小写的。

操作数据库时采用utf8_general_ci校验规则

创建数据库时指定数据库的校验规则为utf8_general_ci,数据库的编码格式默认为utf8。

在该数据库中创建一个简单的person表,由于创建未指定表的编码格式和校验规则,因此person表将继承当前数据库的编码格式和校验规则。

此时向表中插入一些数据,通过select语句可以查看插入表中的数据。

此时我们可以指定查看表中的name='a'会将A和a一起给筛选出来,根本原因就是utf8_general_ci校验规则在进行数据比对时是不区分大小写的。

我们在对表中的数据进行排序,也会发现时不区分大小写的。

操作数据库时采用utf8_bin校验规则

创建数据库时指定数据库的校验规则为utf8_bin,数据库的编码格式默认为utf8。

在该数据库中同样创建一个简单的person表,该person表将继承当前数据库的编码格式和校验规则。

同样我们向表中插入一些数据,通过select语句可以查看插入表中的数据。

但这时指定查看表中name='a'的记录时只会将a筛选出来,根本原因就是utf8_bin校验规则在进行数据比对时是区分大小写的。

我们在对表中的数据进行排序,也会发现此时是区分大小写的。

操纵数据库

查看数据库

使用 show databases SQL可以查看系统中的所有数据库。

使用 show create databases 数据库名可以查看对应数据库的创建语句。


说明:

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

修改数据库

修改数据库的SQL如下:

cpp 复制代码
ALTER DATABASE db_name [[DEFAULT] CHARSET=character_name] [[DEFAULT] COLLATE=collation_name];

说明:

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

实例: 将test1 数据库字符集改成 gbk。

删除数据库

删除数据库的SQL如下:

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

执行删除之后的结果:

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

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

数据库备份和恢复

数据库备份

使用如下命令即可对指定数据库进行备份:

cpp 复制代码
mysqldump -P 端口号 -u 用户名 -p 密码 -B 数据库名1 数据库名2 ...  > 数据库备份存储的文件路径

下面我们创建一个数据库,并在该数据库中创建两个表。

在两个表中分别插入两条记录:

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

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

数据库恢复

使用如下命令即可对指定数据库进行恢复:

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

我们先将刚才创建的数据库删除:

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

实际恢复数据库的时候就是按顺序执行数据库备份文件中的SQL语句,执行完毕后数据库也就恢复出来了,同时该数据库下的两张表,以及表当中的数据也都恢复出来了。

表的备份和恢复

使用如下命令即可对指定表进行备份:

cpp 复制代码
mysqldump -P 端口号 -u 用户名 -p 密码 数据库名 表名1 表名2 ... > 表备份存储的文件路径

假设我们此时数据库中除了person1和person2以外还有其他表:

如果只想备份数据库中的person1和person2表,这时就可以在命令行中执行如下命令,并指定将备份后产生的文件存放在当前目录下。

与person1和person2表相关的SQL语句,就会被保存到备份文件当中。

表恢复

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

在数据库中使用如下命令即可对指定表进行恢复:

cpp 复制代码
source 表备份存储的文件路径

我们先将刚才的数据库删除。

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

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

查看连接情况

使用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。

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

相关推荐
时间售卖铺1 小时前
触发器与函数实战:MySQL高效编程秘诀
运维·数据库·mysql·云原生
qetfw1 小时前
UOS MariaDB 数据库:安装、最小权限与备份验证
linux·数据库·mariadb·uos
数智园区合作社2 小时前
问数平台怎么把同一个指标锁成一个数
大数据·数据库·人工智能·ai
lbb 小魔仙2 小时前
Windows搭建PaddleOCR+飞书Webhook自动打卡通知机器人:识别、推送与远程触发完整教程
数据库·人工智能·prometheus·时序数据库
captain3763 小时前
MyBatis操作数据库(入门2)
java·数据库·spring boot·后端·spring·mybatis
心中有你02144 小时前
Java实现Dijkstra最短路径算法(邻接表 + 优先队列)
java·数据库·算法
龙亘川4 小时前
综合素质评价业务建模:从过程性评价到成长档案全链路闭环
数据库·智慧城市·数据可视化
数据库小组4 小时前
NineData 实战教程:MySQL 5.5 数据迁移同步到 MySQL 8.0(跨版本升级)
数据库·mysql·mysql优化·数据库开发·数据库迁移·版本升级·数据复制
zhangjw345 小时前
1-5 PostgreSQL 数据类型全集:基础类型、字符串、数值、时间类型
数据库·postgresql
王中阳Go5 小时前
5.27 分钟干完后端和全部测试:一场三小时笔试的五个失分点,四个不在代码上
大数据·数据库·人工智能·后端·大语言模型