Intention Locks(意向锁)

意向锁是一种表级锁

  • IS (意向共享锁):事务有意向对表中的某些行加共享锁(S锁)
  • IX (意向排它锁):事务有意向对表中的某些行加排它锁(X锁)

目的

当一个新的事务要对表级别加 S 锁或 X 锁时,不再需要去遍历表中的每页、每行是否已经添加了互斥的页锁、行锁,而只需要查看该表是否添加了对应的意向锁即可,提升了性能。

兼容互斥性

ISIXSX
IS兼容兼容兼容互斥
IX兼容兼容互斥互斥
S兼容互斥兼容互斥
X互斥互斥互斥互斥

在这张表格中,S, X 锁的层级与 IS, IX 锁的层级相同,例如都为表级锁,或者都锁了同一数据页

举例

事务 A 先获取了某一行的排他锁,并未提交:

SELECT * FROM users WHERE id = 6 FOR UPDATE;

事务 B想要获取users表的共享锁,检测到事务 A 已经获取了表级的 IX 锁,于是加锁请求被阻塞。

References

详解 MySql InnoDB 中意向锁的作用

IS lock IX lock