意向锁_意向锁

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

意向锁_意向锁_02




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

总结一下:

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

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



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