轻松理解脏读、不可重复读、幻读


多个事务对数据库的并发操作带来的数据不一致性包括脏读、不可重复读、幻读。

一、脏读

脏读是指事务1修改某一个数据并将其写回磁盘,事务2读取了这个被修改后的数据,但是事务1由于某些原因被撤销了,这时被事务1修改的数据就会恢复到原值,造成事务2读到的数据与数据库中的数据不一致,那么事务2读到的就是脏数据。

事务1事务2
开启事务
账户余额为1000开启事务
存入1000,余额增加为2000
查询账户余额为2000
发生故障,事务回滚,账户余额恢复到1000提交
提交

事务2中读到的余额为2000,与数据库中的余额1000不一致。

二、不可重复读

不可重复读是指事务1读取数据后,事务2执行了更新操作,使事务1无法再得到与第一次一样的结果。

事务1事务2
开启事务
账户余额为1000开启事务
转入1000
提交
再次查询余额为2000
提交

在事务1中第一次查询余额为1000,第二查询为2000,两次读取结果不一致。

三、幻读

幻读是指事务1在读取某个范围内的数据后,事务2又在该范围内插入了新的数据或者删除了已有的数据,再次查询该范围发现数据总量上的不一致,就像产生了幻觉一样,无端多出或少了几条数据。

事务1事务2
开启事务
查询student表,得到99条数据开启事务
来了1个插班生或转走1个学生
提交
再次查询student表,得到100或98条数据
提交

四、特点

脏读:读其他事务还未提交的数据。

不可重复读:前后几次读取,数据总量相同,内容不同,针对update操作。

幻读:前后几次读取,数据总量不相同,针对insertdelete操作。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值