意向锁

https://www.zhihu.com/question/51513268/answer/648362223

设想一下,假如没有这道“关卡”检查表锁被是否被占有, 而是直接去获取行锁,会是什么结果?

可以看到, 即使表X锁已经被事务A持有,事务B仍然可以获得行锁,这显然是错误的. 没有意图锁以后,行锁的获得和表锁没有任何关系,表锁失去对行锁的控制.

总结一下:

每个事务在尝试获取自己需要的行锁时, 会先通过意图锁检查一下表锁的占用情况,再决定是否继续获得行锁,具体判断规则:

  1. 如果表X锁被占有,则其他事务尝试获得 ISIX均会阻塞,也就不能继续获取行X锁行S锁了.
  2. 如果表S锁被占有,则其他事务可以获得IS, 而获得IX会阻塞. 从而阻止其他事务获得行X锁


有一个例外,插入意向锁,它本身不是个意向锁

posted on 2020-04-12 22:33  silyvin  阅读(406)  评论(0编辑  收藏  举报