MYSQL的行锁: 独占锁、共享锁
表锁:除了独占锁共享锁之外,还有意向锁和MDL锁。
意向锁:
意向锁是一种不与行级锁冲突表级锁。
意向锁数据引擎自己维护,自己无法去操作。
在为数据行加共享 / 排他锁之前,InooDB 会先获取该数据行所在在数据表的对应意向锁。
需要解决的问题:
如果事务A先给表加了排他锁,没有提交的情况下,事务B再去加共享锁就需要检查:表是否存在排它锁,表每一行是否存在排它锁。如果真的去检测每一行,效率很差,这时候就可以用意向锁。
意向锁和表级的排他/共享锁的互斥关系如图,意向共享锁和共享锁之间不会互斥
这里的排他 / 共享锁指的都是表锁!!!意向锁不会与行级的共享 / 排他锁互斥!!!
这一段写的很好:
摘自 https://juejin.cn/post/6844903666332368909
总结
- InnoDB 支持
多粒度锁
,特定场景下,行级锁可以与表级锁共存。 - 意向锁之间互不排斥,但除了 IS 与 S 兼容外,
意向锁会与 共享锁 / 排他锁 互斥
。 - IX,IS是表级锁,不会和行级的X,S锁发生冲突。只会和表级的X,S发生冲突。
- 意向锁在保证并发性的前提下,实现了
行锁和表锁共存
且满足事务隔离性
的要求。
MDL锁:
标签:行级,乔亚,MDL,----,互斥,意向锁,共享,表级 From: https://www.cnblogs.com/dwj-ngu/p/17141962.html