You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL复合主键前缀下DELETE语句的锁范围与锁类型咨询

DELETE FROM T WHERE A=x LIMIT 100 的锁逻辑分析(InnoDB引擎)

锁的类型

  • 实际被删除的100条记录会被加上排他锁(X锁):这是行级锁,确保其他事务无法对这些行执行读(加共享锁S)或写操作,保证删除操作的原子性和一致性。
  • 表级别会添加意向排他锁(IX锁):这是一种表级标记锁,用来告诉其他事务“本事务正在表内某些行持有排他锁”,避免全表扫描的事务直接加表级S/X锁时产生冲突。

是否会锁定所有A=x的行?

不会。核心原因如下:

  1. LIMIT 100的终止逻辑:当InnoDB扫描到100条满足A=x的记录后,会立刻停止扫描和加锁流程,不会继续处理剩余的99900条A=x的记录。
  2. 主键索引的扫描路径:因为主键是[A,B,C],A=x匹配主键的前缀,InnoDB会沿着主键索引的有序结构,从第一个A=x的记录开始依次扫描、加锁,直到凑够100条符合条件的行,后续的A=x记录不会被加锁。

隔离级别的额外影响

  • 可重复读(RR)隔离级别:扫描过程中,InnoDB可能会对扫描路径上的间隙添加间隙锁(Gap Lock),防止其他事务插入新的A=x行(避免幻读),但这些间隙锁不会锁定已存在的其他A=x行,仅锁定间隙位置。
  • 读提交(RC)隔离级别:不会添加间隙锁,仅对实际删除的100条记录加排他锁,完全不涉及其他A=x的行。

内容的提问来源于stack exchange,提问作者Katha patel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 05:31:39