脏读、幻读、不可重复读简介

参考文档:https://www.cnblogs.com/sushu-yaya/p/6944287.html 和马士兵老师的教程


事务并发时可能出现的问题:

第一类丢失更新(Lost Update)

时间

取款事务A

存款事务B

T1

开始事务 

 

T2

 

开始事务

T3

查询账户余额为1000

 

T4

 

查询账户余额为1000

T5

 

汇入100元把余额改为1100元

T6

 

提交事务

T7

取出100元把余额改为900 元

 

T8

撤销事务

 

T9

余额恢复为1000元(丢失更新)

 

   

脏读(Dirty Read一个事务读到了另一个事务没有提交的数据

时间

取款事务A

存款事务B

T1

开始事务

 

T2

 

开始事务

T3

 

查询账户余额为1000

T4

 

汇入100元把余额改为1100元

T5

查询账户余额为1100元(读取脏数据)

 

T6

 

回滚

T7

取款1100

 

T8

提交事务失败

 


 不可重复读(non-repeatableread):在同一个事务中,两次读取同一数据,得到的内容不相同

时间

取款事务A

存款事务B

T1

开始事务

 

T2

 

开始事务

T3

查询账户余额为1000

 

T5

 

汇入100元把余额改为1100元

T5

 

提交事务

T6

查询帐户余额为1100

 

T8

提交事务

 

不可重复读重点在修改。

发生情况:在多版本并行控制机制中

第二类丢失更新(secondlost update problem):不可重复读的特殊情况

时间

取款事务A

存款事务B

T1

 

开始事务

T2

开始事务

 

T3

 

查询账户余额为1000

T4

查询账户余额为1000

 

T5

 

取出100元把余额改为900元

T6

 

提交事务

T7

汇入100

 

T8

提交事务

 

T9

把余额改为1100元(丢失更新)

 


 幻读(Phantom Read):同一事务中,用同样的操作读取两次,得到的记录数不相同

时间

查询学生事务A

插入新学生事务B

T1

开始事务

 

T2

 

开始事务

T3

查询学生为10

 

T4

 

插入1个学生

T5

查询学生为11

 

T6

 

提交事务

T7

提交事务

 

幻读的重点在新增、删除操作。

幻读发生在当两个完全相同的查询执行时,第二个查询所返回的结果集跟第一个查询不相同。

发生情况:没有范围锁

解决方案:采用范围锁RangeS RangeS_S模式,锁定检索范围为只读


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值