Innodb存储引擎中的一致性读与排他锁

2018-06-13  本文已影响0人  叛逆的机器人

    在学习innodb存储引擎的过程中,了解到一致性非锁定读是根据MVVC(行多版本控制)的方式实现的。在事务级别为REPEATABLE READ(可重复读)下,事务读取的行数据都是基于事务开始的版本。

创建一个表验证下,字段跟数据如下。

id num
1 2

验证步骤如下。

步骤 事务a 事务b
1 select * from t where id = 1;(num=2) select * from t where id = 1;(num=2)
2 update t set num = 3 where id = 1;
3 commit;
4 select * from t where id = 1;(num=2)

    假如在扣减库存中,事务a跟事务b并发查询,都发现num为1,这时候事务a已经提交了,但是因为事务的隔离性,事务b并没有发现,就会导致b扣减了库存。
在这种情况下,可以用排他锁,在查询的时候加上for update,就会查询最新的行记录版本,而不是事务开始的版本。

步骤 事务a 事务b
5 select * from t where id = 1 for update;(num=3)
上一篇 下一篇

猜你喜欢

热点阅读