美文网首页
Innodb存储引擎中的一致性读与排他锁

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

作者: 叛逆的机器人 | 来源:发表于2018-06-13 22:33 被阅读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)

    相关文章

      网友评论

          本文标题:Innodb存储引擎中的一致性读与排他锁

          本文链接:https://www.haomeiwen.com/subject/eliseftx.html