首页 > 解决方案 > 为什么 Next-Key 锁要这样称呼?

问题描述

据我了解(基于官方文档),Next-Key 锁是一个索引记录锁+该索引记录之前的间隙锁(之前的间隙)。

所以我很好奇为什么叫NEXT-Key lock?这里的“关键”是什么意思,为什么是“下一个”?

标签: mysqllockinginnodb

解决方案


在这种情况下,是指索引中的一个条目。所以有人可以说,“一个键被锁定”,这意味着某个会话对索引中的一个条目进行了锁定。

通过索引搜索或扫描获取下一个键锁。

UPDATE mytable WHERE id > 18;

假设索引 10、11、13 和 20 中实际存在值(如该手册中的示例)。上面显示的 UPDATE 会将条目锁定为 20,以及 20 之前的间隙,因为它是索引扫描。

然后您的会话尝试插入间隙:

INSERT INTO mytable (id) VALUES (19);

这与 next-key lock 的 gap-lock 部分冲突。

可以这样想:您无法锁定 19,因为其他会话已经锁定了包含您要插入的值 19 以及 20 的间隙,这是19 之后真正存在的下一个键在索引中。


推荐阅读