mysql事务的读_MySQL事务的读脏

所谓读脏,是指一个事务读取了,另外一个事务未提交的数据

首先,开启两个命令行窗口,模拟账户a和账户b

登录到数据库,chapter06

bfd331665dd3fb709a8cf07dea219499.jpg图片描述" title="">

设置b账户,事务的隔离级别

MysqL默认的隔离级别是REPEATABLE READ——可重复读

该级别是可以避免读脏的,因此,需要将b账户中事务的隔离级别设置为READ UNCOMMITTED——读未提交

SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

参数说明

SESSION,表示当前会话

TRANSACTION,表示事务

ISOLATION,表示隔离

LEVEL,表示级别

READ UNCOMMITTED,表示当前的隔离级别

a96db31f8494548b66fdaa0da7f78a79.png图片描述" title="">

可以看出,b账户的隔离级别,已经设置为了READ UNCOMMITTED

演示读脏

B账户,为了证明出现读脏的情况,首先,在b账户中开启一个事务,并在该事务中,查询当前账户的余额信息

6ce951e42c6f4d0e252d422f4b99948e.png图片描述" title="">

A账户,在a账户中开启一个事务,在当前窗口中,执行转账功能

00486c33bdc57ffa1a7cead58f9ac17f.png图片描述" title="">

注意,此时,不要提交事务

如果,提交事务,就无法演示出现读脏的情况

B账户,a账户执行完转账语句后,b账户查询当前账户

0cc1d03ca86c751f7f6e37eedb70cb16.png图片描述" title="">

可以看出,a账户已经成功给b账户,转账了100元

这时,由于b账户的事务隔离级别较低,因此,读取了a账户中,还没有提交的内容,出现了脏读的情况,此时,b误以为a账户已经转账成功了,便给a发货

当b发货之后,a如果不提交事务,而是将事务回滚,此时,b就受了损失

演示完毕之后,将a账户中的事务回滚,b账户中的事务提交

设置b账户中,事务的隔离级别

为了防止脏读发生,将b账户的隔离级别设置为READ COMMITED——读提交,该级别可以避免读脏

aa6ab9909782e9667da64b1a4810a212.png图片描述" title="">

可以看出,b账户的隔离级别,已经设置为了READ COMMITTED;

验证是否脏读

B账户,在b账户中开启一个事务,在事务中查询个账户的余额

85d5e243cfb911433e725267ad13f704.png图片描述" title="">

A账户,在a账户中,重新开启一个事务,实现转账功能

7b821eb022dd1a26b4fd5bda194aa0b3.png图片描述" title="">

B账户,当a账户转账成功之后,在b账户中,查询各账户的余额

921db8eed46653d2970ff969834e6a17.png图片描述" title="">

可以看出,b账户在同一个事务中,查询结果是一致的,并没有查询到a账户中,未提交的内容

因此,说明READ COMMITTED隔离级别可以避免读脏,最后,分别将a账户和b账户中的事务回滚

总结

以上是编程之家为你收集整理的MySQL事务的读脏全部内容,希望文章能够帮你解决MySQL事务的读脏所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

如您喜欢交流学习经验,点击链接加入交流1群:1065694478(已满)交流2群:163560250

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值