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

数据库 专栏收录该内容
4 篇文章 0 订阅


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

一、脏读

脏读是指事务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
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 技术工厂 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值