ZBLOG

mysql 间隙锁例子

MySQL 间隙锁是为了防止幻读而引入的一种锁机制。它会在查询时对查询涉及到的范围进行锁定,以避免其他事务在该范围内插入或删除数据。

下面是一个 MySQL 间隙锁的例子:

假设有一个表 t1,包含两列 id 和 value:

CREATE TABLE t1 (
  id INT PRIMARY KEY,
  value VARCHAR(255)
);

现在有两个事务 A 和 B,A 在执行如下语句:

BEGIN;
SELECT * FROM t1 WHERE id >= 10 AND id <= 20 FOR UPDATE;

B 在执行如下语句:

BEGIN;
INSERT INTO t1 (id, value) VALUES (15, 'test');
COMMIT;

这时候 B 的插入操作就会被阻塞,因为 A 对 id 范围内的行进行了锁定,而 B 正试图插入一个与 A 查询重叠的行。如果没有间隙锁的话,B 就可以成功地插入数据,导致 A 查询出现幻读。

通过添加间隙锁,MySQL 可以保证 A 和 B 的操作不会互相冲突。A 执行 SELECT 语句时会自动加上间隙锁,包括 id=9 到 id=10 和 id=20 到 MAX(id) 这两个范围。这样就可以防止其他事务插入或删除 id 在这个范围内的行,从而避免幻读的问题。

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?