ZBLOG

mysql 间隙锁

MySQL中的间隙锁(Gap Lock)是一种特殊的行锁,用于解决并发操作下的幻读问题。它可以锁定一个范围而不是单独的行,以避免其他事务插入新数据导致范围内存在未被检索到的数据。

举个例子,假设有如下表结构:

CREATE TABLE t (id INT PRIMARY KEY, name VARCHAR(50));

现在执行如下语句:

SELECT * FROM t WHERE id > 10 AND id < 20 FOR UPDATE;

这时候就会出现间隙锁。因为该查询语句没有将所有满足条件的行都查出来,只查询了 id 大于10小于20 的数据,如果其他事务插入了 id 等于15的数据,则原本不存在的15也会变成可见的,而这时候加上FOR UPDATE语句后就会阻塞其他事务对 15 行进行修改或者插入等操作。

需要注意以下几点:

  1. MySQL默认情况下不启用间隙锁机制,需手动开启。

  2. 只有使用范围查询(比如WHERE id > 10 AND id < 20)才会出现间隙锁。

  3. 不同存储引擎之间对间隙锁支持程度不同。InnoDB引擎完全支持间隙锁机制,但是MyISAM引擎则不支持。

  4. 间隙锁可能会导致死锁问题,需要谨慎使用。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=3671

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?