概述
- 在Mysql 的表级锁中,比较常见的是 意向锁 和 元数据锁(MDL),学习的时候并没有进行很明确的区分,时候这两个是包含关系,下面进行下区分记录
意向锁
-
意向共享锁: 当获取数据的共享锁之前必须获取表的意向共享锁。
-
意向排他锁: 当获取数据的排他锁之前必须获取表的意向排他锁。
-
意向锁存在的意义:
- 意向锁主要是为了解决遍历整个表寻找行锁的情况
- 事务A 锁住了表中的一行,然后这一行只能读不能写
- 事务B 申请这个表的写锁,这时候事务B 需要遍历整个表查找该表是否存在行锁
- 通过意向锁, 事务A 在申请读锁的时候,必须申请意向共享锁,让 事务B 申请写锁的时候,直接于意向共享锁冲突
MDL 锁
- MDL锁主要关注的是 DDL 事件
- 当对一个表做 增删改查操作 的时候,加MDL 读锁;当 要对表做结构变更操作的时候,加MDL写锁,会阻塞全部