当前位置: 首页
科技数码
面试官:什么是 Next-Key Lock?作用是什么?

面试官:什么是 Next-Key Lock?作用是什么?

热心网友 时间:2025-12-15
转载

Next-Key Lock 是 InnoDB 引擎行锁加间隙锁的组合,它锁住的是一个前开后闭的区间,消除了 REPEATABLE READ 隔离级别下的幻读问题。 Next-Key Lock 是 I

Next-Key Lock 是 InnoDB 引擎行锁加间隙锁的组合,它锁住的是一个前开后闭的区间,消除了 REPEATABLE READ 隔离级别下的幻读问题。

Next-Key Lock 是 InnoDB存储引擎中非常基础也是非常重要的一个锁。今天来聊一聊Next-Key Lock。

首先我们回顾一下MySQL的事务隔离级别。

串行化(Serializable):事务对数据读写都是串行的。可重复读(Repeatable Read):事务执行过程中,多次读取同一行数据,读取结果一致。MySQL默认隔离级别就是可重复读。读已提交数据(Read Committed):事务执行过程中,如果有其他事务修改了数据并且提交事务,当前事务可以读取到最新提交的数据。读未提交数据(Read Uncommitted):事务执行过程中,可以读取到其他事务未提交的数据。

可重复读隔离级别解决了幻读问题,而解决的方式就是通过MVCC 和 Next-Key Lock。

幻读:同一事务内多次查询同一范围内的数据,因其他事务插入或删除符合条件的数据,导致事务在后面读取到的结果集不一样,像产生了幻觉。

介绍

Next-Key Lock是间隙锁(gap lock)和行锁(index-record lock)的组合。

行锁: 锁定索引中的某一条具体记录。间隙锁: 锁定索引记录之间的间隙,它锁定的是一个范围,这个范围内不存在数据。例如,如果锁定了(10, 20)这个范围,那其他事务就不能在这个范围内插入新记录。

一个 Next-Key Lock,也就是行锁加上该行之前的间隙锁,因此,它锁定的是一个前开后闭区间。

我们假设有一张表t,包含(id,a,b)3个字段,其中 id 是主键,字段 a 上面有普通索引,字段 b 没有索引。建表语句如下:

CREATE TABLE `t` ( `id` int(10) NOT NULL, `a` int(10) DEFAULT NULL, `b` int(10) DEFAULT NULL, PRIMARY KEY (`id`), KEY `idx_a` (`a`)) ENGINE=InnoDB;

表中有 4 条记录,分别(5,5,5),(10,10,10),(15,15,15),(20,20,20),那如果执行下面语句:

select * from t where id = 7 for update;

这样会对id= 10的记录加Next-Key Lock,锁定的是(5, 10]这个区间,也就是说,除了锁住id = 10这条记录(行锁),同时间隙锁锁住了 5 和 10 之间的间隙(5,10)。

而如果执行下面这条SQL,则会对整张表加Next-Key Lock,因为字段 c 没有索引,新插入的数据都可能包含 c = 6。加锁后,形成 5 个范围:

select * from t where c = 6 for update;

图片图片

加上了Next-Key Lock,可以阻止其他事务在被锁定的间隙中插入新的记录,从而保证了当前事务中多次执行相同查询时,不会有新的记录查出来,解决了幻读问题。

在可重复隔离级别下,执行下面几个SQL时,都可能会对扫描过程中访问到的记录加Next-Key Lock:

SELECT * from t where id =xxx FOR UPDATE;//id 不存在SELECT * from t where a =xxx FOR UPDATE;SELECT * from t where b =xxx FOR UPDATE;SELECT * from t where id BETWEEN 10 AND 20;SELECT * from t where id =xxx LOCK IN SHAREMODE;UPDATE t set b = xxx where id = yyy;DELETE from t where id = yyy;

非唯一索引和无索引的字段,都可能会匹配多条记录,所以会加Next-Key Lock。

那如果查询的id存在,还会加Next-Key Lock吗? 比如上面的表,执行SQL:

SELECT * from t where id = 10 for update;

答案是不会加Next-Key Lock,这个时候Next-Key Lock退化成了行锁。

查询语句符合下面三个条件时,Next-Key Lock会退化成行锁:

查询使用的是唯一索引;SQL条件是等值匹配(比如 WHERE unique_key = X);扫描到的记录确定存在。

如果上面 3 个条件有一个不符合 ,都会加 Next-Key Lock。

另一点,虽然Next-Key Lock是前开后闭区间,如果索引上等值查询向右遍历到最后一个值不满足等值条件,则退化为间隙锁。比如执行下面SQL:

SELECT * from t where id = 8 for update;

Next-Key Lock退化为间隙锁,加锁范围是(5,10)。id = 10的这条记录不影响其他事务修改操作。

优缺点

优点:解决了REPEATABLE READ隔离级别下幻读问题,有效保证了数据一致性。

缺点: 增加了锁的粒度,一定情况下会降低并发性能,并增加死锁发生的概率。因为多个事务可能以不同的顺序请求对重叠的间隙加锁,很容易造成死锁。

下面是一个死锁的案例,事务A准备插入一条(8,8,8)的记录,事务 B 准备插入一条(9,9,9)的记录,其他他们相互不影响,但加了 Next-Key Lock,就容易造成死锁。

这样两个事务都会加(5,10)这个间隙锁,最终相互等待,形成死锁。

为什么两个事务都可以加上间隙锁,因为间隙锁之间不会冲突。

总结

Next-Key Lock 是 InnoDB引擎行锁加间隙锁的组合,它锁住的是一个前开后闭的区间,消除了REPEATABLE READ隔离级别下的幻读问题。理解Next-Key Lock要把握两点:

可重复隔离级别下才会生效;锁住一个前开后闭的区间,但一定条件下可能退化成行锁或者间隙锁。
来源:https://www.51cto.com/article/822993.html

游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

同类文章
更多
Meta扎克伯格坦承AI智能体发展不及预期,超级智能仍需时间

Meta扎克伯格坦承AI智能体发展不及预期,超级智能仍需时间

IT之家 7 月 3 日消息,据《商业内幕》今天报道,Meta 首席执行官马克 · 扎克伯格在上周四的一场内部全员会中表示,公司仍在努力实现“超级智能”(Superintelligence),但目前还需要投入更多时间和精力。据两位参会人士透露,扎克伯格表示,Meta 正在向人工智能领域投入大量资源,

时间:2026-07-13 14:42
Agentic AI重构影像创作,影石Insta360联

Agentic AI重构影像创作,影石Insta360联

全民影像记录时代到来,全景相机、运动相机、航拍无人机走进大众生活,每个人都能随手拍摄海量视频素材,但剪辑繁琐、高光筛选耗时、全景素材适配难等行业痛点始终未能彻底解决。市面上主流剪辑工具大多只聚焦后期编辑,平台适配流程复杂、模板同质化严重,针对360°全景画面的智能制作能力更是长期空白。与此同时,全球

时间:2026-07-13 14:40
微软Teams加强第三方AI智能体权限管理,需会议组织者确认后放行

微软Teams加强第三方AI智能体权限管理,需会议组织者确认后放行

IT之家 7 月 6 日消息,微软发文,宣布为 Microsoft Teams 会议应用推出全新的 AI 机器人管理策略,当第三方 AI 机器人尝试加入会议时,必须先获得会议组织者批准后才能进入。据介绍,目前微软已在 Teams 管理中心新增“Manage external bots and the

时间:2026-07-13 14:36
小猿AI接入多模态AI能力,推动智能学习体验升级

小猿AI接入多模态AI能力,推动智能学习体验升级

小猿AI升级为全学科AI学习助手,强化多模态能力,支持图像识别、文本理解与题目解析;拍照后可智能分析题型、匹配知识点并推荐练习;语文英语模块新增语句纠错、单词解释及作文辅助功能。小猿AI近期在产品能力上迎来重要升级,正式强化多模态AI能力,使其在图像识别、文本理解与题目解析方面表现更加全面。据产品体

时间:2026-07-13 14:19
阶跃AI推动多模态AI发展:语音与内容生成能力持续增强

阶跃AI推动多模态AI发展:语音与内容生成能力持续增强

阶跃AI正加速构建多模态AI能力,重点布局语音识别与生成、跨模态内容理解;强化语音交互,支持自然语音输入输出;提升图文理解能力,拓展至营销文案、知识整理等智能写作场景;向全面智能助手演进。阶跃AI正在加速推进多模态AI能力建设,重点布局语音识别、语音生成以及跨模态内容理解能力。在最新技术方向中,阶跃

时间:2026-07-13 14:16
热门专题
更多
刀塔传奇破解版无限钻石下载大全 刀塔传奇破解版无限钻石下载大全
洛克王国正式正版手游下载安装大全 洛克王国正式正版手游下载安装大全
思美人手游下载专区 思美人手游下载专区
好玩的阿拉德之怒游戏下载合集 好玩的阿拉德之怒游戏下载合集
不思议迷宫手游下载合集 不思议迷宫手游下载合集
百宝袋汉化组游戏最新合集 百宝袋汉化组游戏最新合集
jsk游戏合集30款游戏大全 jsk游戏合集30款游戏大全
宾果消消消原版下载大全 宾果消消消原版下载大全
  • 热门数据榜