验证mysql 隔离级别为读已提交时解决脏读问题

在学习事务的隔离级别时不知道你们会不会产生这样的疑问,在设置事务的隔离级别时只说了设置,可是没说要在哪个事务里设置什么样的隔离级别,如果某一个事务里面设置了其它的隔离级别会怎么样呢?
今天就来验证下隔离级别为读已提交时怎么解决脏读

mysql版本:8.0

  1. 首先需设置下自动提交 将自动提交关闭

set autocommit = 0;
查看是否关闭
show variables like ‘autocommit’;
在这里插入图片描述

  1. 设置隔离级别及查看

set global transaction isolation level read committed; – 全局隔离级别
set session transaction isolation level read committed; – 会话隔离级别
select @@global.transaction_isolation,@@transaction_isolation;
在这里插入图片描述

表结构:
在这里插入图片描述

开始验证

  1. 脏读问题重现
    开启俩个会话, 将session级别会话的隔离级别都改为读未提交,按图中标注的顺序执行就可重现
    在这里插入图片描述

  2. 将更新数据的事务的隔离级别设置为读已提交,发现脏读并未解决
    在这里插入图片描述

  3. 将只读事务中的隔离级别改为读已提交, 更新数据的事务改为读未提交,脏读得到了解决
    在这里插入图片描述

  4. 将只读事务中的隔离级别改为读已提交, 更新数据的事务改为读已提交,脏读得到了解决
    在这里插入图片描述

结论

由上面的实验得出,为解决脏读问题,只需要将读事务的的隔离级别设置成读已提交即可


版权声明:本文为qq_35623773原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。