【发布时间】:2019-06-30 22:13:14
【问题描述】:
据我了解(基于official docs),Next-Key 锁是索引记录锁 + 索引记录之前的间隙锁(前间隙)。
所以我很好奇为什么叫NEXT-Key lock?这里的“关键”是什么意思,为什么是“下一个”?
【问题讨论】:
据我了解(基于official docs),Next-Key 锁是索引记录锁 + 索引记录之前的间隙锁(前间隙)。
所以我很好奇为什么叫NEXT-Key lock?这里的“关键”是什么意思,为什么是“下一个”?
【问题讨论】:
在此上下文中,key 表示索引中的一个条目。所以可以说,“一个键被锁定”,这意味着某个会话持有一个索引中的条目的锁定。
通过索引搜索或扫描获取下一个键锁。
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 之后的键。
【讨论】: