【MySQL】 MySQL间隙锁理解

在这里插入图片描述

什么是间隙锁

  • 间隙锁(Gap Lock)是Innodb可重复读提交下为了解决幻读问题时引入的锁机制,间隙锁只有在隔离级别为可重复读的情况下才会生效;
  • 锁加载两个索引之间(空闲空间),也可以是第一个索引之前,也有可能是最后一个索引之后;

什么是幻读?

  • 事务 A 按照一定条件进行数据读取, 期间事务 B 插入了相同搜索条件的新数据,事务 A 再次按照原先条件进行读取时,发现了事务 B 新插入的数据,这种现象称为幻读;

为什么会产生幻读?

  • 产生幻读的原因是行锁只能锁住行,但插入数据这个动作是要更新记录之间的间隙;

实际作用场景

  1. 假设student表有id,name两个字段,id为1,2,5;
  2. 客户端1执行sql:update student set name = '张三' where id > 1 and id < 5;(此时事务不提交)
  3. 客户端2执行sql:INSERT INTO student ( id, name) VALUES ( 3,'李四' );(此时会发现此条sql会阻塞状态)

解析

  • 当客户端1执行sql时,间隙锁会锁住id为 2,3,4的数据,虽然3,4数据为空,但也不可以执行插入操作(为了解决幻读);
  • 当客户端1事务提交之后方可插入成功;

参考

  • https://www.cnblogs.com/aspirant/p/9177978.html
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

素人岳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值