mysql - 为什么 Next-Key 锁要这样称呼?
问题描述
据我了解(基于官方文档),Next-Key 锁是一个索引记录锁+该索引记录之前的间隙锁(之前的间隙)。
所以我很好奇为什么叫NEXT-Key lock?这里的“关键”是什么意思,为什么是“下一个”?
解决方案
在这种情况下,键是指索引中的一个条目。所以有人可以说,“一个键被锁定”,这意味着某个会话对索引中的一个条目进行了锁定。
通过索引搜索或扫描获取下一个键锁。
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 之后真正存在的下一个键在索引中。
推荐阅读
- tensorflow - Keras Tensorflow 中的切片张量
- ckeditor - 在 CKEditor 中更改插件标题的语言
- node.js - 我正在使用 IMAP npm 库来获取显示“无效凭据”的邮件
- python - 当我尝试使用 Logger.getChild() 方法获取子记录器时,记录处理程序消失
- windows - 如何在登录时启动程序
- c# - 带有 IdentityServer4 授权代码流的本机登录页面
- acumatica - Acumatica REST API - 需要有关 API 的信息以显示帐户查询/客户未结余额
- python - 在 matplotlib 中使用箭头获取 x 和 y 轴并控制 x 和 y 标签的位置
- flutter - 如何获取 sharedPreference 值?
- visual-studio - xamarin.forms nuget 包的 naxam mapbox 不起作用