news 2026/5/25 15:26:29

彻底讲清 MySQL InnoDB 锁机制:从 Record 到 Next-Key 的全景理解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
彻底讲清 MySQL InnoDB 锁机制:从 Record 到 Next-Key 的全景理解

在真实业务中,你遇到的大多数 MySQL 性能问题、死锁问题,几乎都与“锁”有关。但很多工程师对锁的理解停留在碎片层面:
知道“行锁”“间隙锁”“next-key-lock”,但不知道SQL 是如何触发这些锁的、锁到底锁在哪里、为什么会锁这么多

这一篇文章,我会用工程化思维,带你一次性理解InnoDB 锁机制的全景图

看完以后,你将具备:

✔ 能看懂锁的真实作用
✔ 能从 SQL 推断出锁范围
✔ 能解释死锁发生原因
✔ 能在面试中条理清晰地讲出锁机制


一、为什么 InnoDB 的锁机制这么复杂?

MySQL 采用MVCC + 锁实现事务隔离,其中最关键的隔离级别是:

  • RC:读已提交

  • RR:可重复读(默认)

RR 是企业最常见的隔离级别,它要解决“幻读”问题。
于是有了三个锁:

  • 记录锁(Record Lock)

  • 间隙锁(Gap Lock)

  • Next-Key Lock(Record + Gap)

所有复杂问题都来自这个组合。


二、InnoDB 的三种核心锁(理解它们的作用和触发条件)

Record Lock:真实行上的锁

锁的对象:一条真实存在的记录
触发场景:精确命中唯一索引

例如:

SELECT * FROM user WHERE id = 10 FOR UPDATE;

只锁(10]—— 单条记录。

特点:不会锁间隙,因此不会阻止插入。


Gap Lock:只锁“间隙”,不锁数据

作用:阻止“间隙内插入新数据”,防止幻读。

例如:
索引中已有值:

10 --- 20 --- 30

SQL:

SELECT * FROM user WHERE age > 20 FOR UPDATE;

Gap Lock 会锁住:

(20, 30) (30, +∞)

重点:Gap Lock 不锁记录,只锁区间。


Next-Key Lock:Record + Gap 的组合锁

RR 下范围查询的默认锁模式:

(prev_key, record_key]

例如:(假设索引有 10、20、30)

SELECT * FROM t WHERE age BETWEEN 15 AND 25 FOR UPDATE;

锁住的区间:

(10,20] (20,30]

作用:
✔ 锁住命中的记录
✔ 锁住记录前的 gap → 阻止插入

这就是为什么 RR 隔离级别能规避幻读。


三、锁到底由哪些 SQL 触发?

“ SQL → 锁类型” 映射表:

SQL 场景索引情况锁类型原因
WHERE id = ?(唯一键)精确命中Record Lock不需要锁 gap
WHERE id = ?(普通索引)精确匹配,但非唯一Next-Key Lock防止幻读
WHERE age > ?/< ?范围扫描Next-Key Lock必须锁 gap
BETWEEN范围查询范围扫描Next-Key Lock防止插入
无索引过滤全表扫描大量 Record Lock每条记录都会被锁
LIKE '%abc'无法走索引表锁风险全表扫描

一句话总结:

能精确锁住记录 → Record Lock
需要范围扫描 → Next-Key Lock
范围扫描一定会锁 gap → Gap Lock


四、锁具体加在什么区间?

假设索引中有如下值:

10 ---- 20 ---- 30 ---- 40

来看不同 SQL 加的锁👇

WHERE id = 20 FOR UPDATE

锁:

(10, 20]

但如果字段是主键/唯一键,会优化成:

[20]

WHERE id > 20 FOR UPDATE

锁:

(20,30) (30,40) (40,+∞)

WHERE id BETWEEN 15 AND 35 FOR UPDATE

锁:

(10,20] (20,30] (30,40]

无索引条件

SELECT * FROM user WHERE name='xxx' FOR UPDATE;

锁住所有记录:

[10], [20], [30], [40]

→ 大量锁冲突发生的根源。


五、总结

  1. InnoDB 的锁永远基于索引。

  2. 无法精确匹配记录,就会使用 Next-Key Lock。

  3. 范围查询一定会带 gap 锁。

掌握这三点后,死锁、锁等待、幻读问题都能一眼看穿。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/26 6:58:28

AI学会理解物理法则:OpenAI Sora 2如何重塑视频生成新范式

欢迎来到小灰灰的博客空间&#xff01;Weclome you&#xff01; 博客主页&#xff1a;IT小灰灰 爱发电&#xff1a;小灰灰的爱发电 热爱领域&#xff1a;前端&#xff08;HTML&#xff09;、后端&#xff08;PHP&#xff09;、人工智能、云服务 目录 一、物理引擎的"顿悟…

作者头像 李华
网站建设 2026/5/26 6:53:05

全连接层(Fully Connected Layer)

全连接层&#xff08;Fully Connected Layer&#xff0c;又称稠密层/Dense Layer&#xff09;是神经网络中最基础且重要的组件之一&#xff0c;广泛应用于多层感知机&#xff08;MLP&#xff09;、卷积神经网络&#xff08;CNN&#xff09;和Transformer等架构中。以下是对全连…

作者头像 李华
网站建设 2026/5/25 15:18:26

一文讲透布隆过滤器实现原理及应用场景总结

布隆过滤器的工作原理布隆过滤器的工作原理基于三个核心要素&#xff1a;1. 一个大的位数组&#xff08;Bit Array&#xff09;这是布隆过滤器的存储主体。它是一个长度为 m 的数组&#xff0c;每个位置只存储一个比特&#xff08;0或1&#xff09;。初始时&#xff0c;所有位都…

作者头像 李华
网站建设 2026/5/25 19:59:13

理性抉择方可行远——企业AI转型的路径选择与风险管控

数字化浪潮下&#xff0c;AI转型已成为企业提升核心竞争力的必答题。然而现实中&#xff0c;不少企业陷入“转型即烧钱”“技术即万能”的误区&#xff1a;传统制造企业盲目自研大模型&#xff0c;耗费数百万后无功而返&#xff1b;互联网公司一味追求API集成便捷性&#xff0c…

作者头像 李华
网站建设 2026/5/26 7:17:52

C51_74HC595串口转并口

文章目录一、74HC595   1、芯片引脚   2、内部框图   3、时序操作二、单芯片工模式   1、原理图   2、驱动代码     1&#xff09;、74hc595.h     2&#xff09;、74hc595.c     3&#xff09;、mian.c三、级联工作模式   1、原理图   2、驱动代码 …

作者头像 李华
网站建设 2026/5/26 5:34:22

C51_HC-SR04超声波模块

文章目录一、HC-SR04   1、电气参数   2、引脚二、HC-SR04工作原理   1、基本工作原理   2、超声波时序图   3、原理图三、代码实例   1、UT.h   2、UT.c   3、main.c   4、实例现象一、HC-SR04 HC-SR04 超声波测距模块可提供 2cm-400cm 的非接触式距离感测功…

作者头像 李华