意向锁和MDL锁

1,150 阅读1分钟

概述

  • 在Mysql 的表级锁中,比较常见的是 意向锁 和 元数据锁(MDL),学习的时候并没有进行很明确的区分,时候这两个是包含关系,下面进行下区分记录

意向锁

  • 意向共享锁: 当获取数据的共享锁之前必须获取表的意向共享锁。

  • 意向排他锁: 当获取数据的排他锁之前必须获取表的意向排他锁。

  • 意向锁存在的意义:

    • 意向锁主要是为了解决遍历整个表寻找行锁的情况
    • 事务A 锁住了表中的一行,然后这一行只能读不能写
    • 事务B 申请这个表的写锁,这时候事务B 需要遍历整个表查找该表是否存在行锁
    • 通过意向锁, 事务A 在申请读锁的时候,必须申请意向共享锁,让 事务B 申请写锁的时候,直接于意向共享锁冲突

image.png

MDL 锁

  • MDL锁主要关注的是 DDL 事件
  • 当对一个表做 增删改查操作 的时候,加MDL 读锁;当 要对表做结构变更操作的时候,加MDL写锁,会阻塞全部