为什么以这种方式调用Next-Key锁定?

时间:2019-06-30 22:13:14

标签: mysql locking innodb

据我了解(基于official docs),Next-Key锁是索引记录锁+间隔锁,位于该索引记录之前(间隔之前)。

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

1 个答案:

答案 0 :(得分:1)

在这种情况下, key 表示索引中的一个条目。因此,可以说“键已锁定”,这意味着某个会话会锁定索引中的条目。

通过索引搜索或扫描获得下一键锁定。

UPDATE mytable WHERE id > 18;

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

然后您的会话尝试插入空白:

INSERT INTO mytable (id) VALUES (19);

这与下一键锁定的间隙锁定部分冲突。

这样想:您无法锁定19,因为其他某个会话已经锁定了包括要插入的值19和下一个下一个值20的间隙。确实存在于索引中的键

相关问题