MySql中事务隔离级别的演示

一说起mysql中的事务隔离级别,我们都知道有四种,分别是读取为提交的,读取已提交的,可重复读,串行化等等。现在我们来分别演示一下这几种隔离级别。

1、准备工作

1、开两个窗口,分别都登录mysql
在这里插入图片描述
2、选择数据库,这里我特意创建了一个test数据库,里面有一张user表
在这里插入图片描述
3、查询一下user表中数据,没啥太大问题
在这里插入图片描述
4、关闭自动提交,这一点很重要,两边都要设置。到此为止,我们的准备工作就完成了
在这里插入图片描述

2、读取未提交

1、设置隔离级别为读取未提交

 set session transaction isolation level read uncommitted;

在这里插入图片描述
2、两边都开启事务,begin
在这里插入图片描述
对比左右两边的数据,最开始执行查询语句select * from user;左右两边查找到的数据是一致的,此时左边的事务执行了更新操作,注意左边事务没有提交,但此时右边再次执行查询的时候却读取到了左边未提交的数据,这就是我们说的脏读。
在读取未提交的隔离级别下,会出现脏读,不可重复读,幻读等等问题。那么如何解决这些问题呢,我们接着往下看

3、提交两边事务,此隔离级别演示结束

commit

3、读取已提交

1、设置隔离级别为读取已提交的

 set session transaction isolation level read committed;

在这里插入图片描述
当我们将隔离级别设置成为读取已提交的级别时,我们发现,脏读问题解决了。左边事务没有提交,右边无法读取左边未提交的数据。

这个时候我们提交左边的事务。
在这里插入图片描述
我们发现左边事务一提交,右边再查询的时候就能够查到修改后的数据,但此时右边的事务还是一个事务,一个事务当中,执行同样的查询语句,查找到的结果却不一样,这就是不可重复读。

4、可重复读

设置隔离级别为可重复读。

 set session transaction isolation level repeateable read;

在这里插入图片描述
将隔离级别上升为可重复读,我们发现,左边事务修改数据后并提交, 左边会查询到更新后的数据,右边事务不受影响,解决了不可重复读的问题
但可重复读这一隔离级别不能解决幻读问题
在这里插入图片描述
在左边的事务中我们删除了id=7的数据,提交事务,在右边查询的事务依然能够查询到id=7的这条数据,但此时我执行delete操作,删除id=7的数据是sql报错;

5、串行化

串行化没什么好说的,最高的隔离级别,解决了脏读,幻读,不可重复读

扫描二维码关注公众号,回复: 12659371 查看本文章

猜你喜欢

转载自blog.csdn.net/weixin_45119323/article/details/109288772