0%

MySQL中InnoDB的意向锁

MySQL的InnoDB引擎的意向锁学习。

InnoDB支持多粒度锁,允许行级锁和表级锁共存。意向锁是一种不与行级锁冲突的表级锁。

  • 意向共享锁(IS),事务在获取行的共享锁之前,需要先获得表的意向共享锁
  • 意向排它锁(IX),事务在获取行的排它锁之前,需要先获得表的意向排它锁

互斥性

意向锁是表级锁,只会和表级锁冲突,不会和行级锁冲突。

  • 意向共享锁和意向排它锁两者之间是兼容的,不互斥的
  • 意向共享锁和表共享锁兼容,意向共享锁和表的排它锁是互斥的
  • 意向排它锁和表共享锁以及表排它锁都互斥
  • 意向锁和行级锁是兼容的

如果事务A获取了一行的排它锁,此时事务A会有两个锁:表意向排它锁和行的排它锁。如果事务B此时要获取表的共享锁,那么事务B就会先检测发现事务A持有表的意向排它锁,则事务B的加锁就会被阻塞,事务B无需检测表中的每一行数据是否有排它锁,只需检测事务A持有意向排它锁。

参考

坚持原创技术分享,您的支持将鼓励我继续创作!
Fork me on GitHub