MySQL 与InnoDB 下的锁做朋友 (四)行锁/记录锁

前言

正文
 

今天我们将要认识这位朋友是 行锁,而这个行锁 我想叫他 行记录锁。

他和另外两位朋友,临键值锁、间隙锁 ,都是 行锁的实现方式。

 还记得咱们一开始在了解innodb引擎下的行锁,强调了好几次,行锁是建立在索引上的

行记录锁当然也是了, 他是建立在当行记录上的 排他锁。

开始实战演示:

表数据准备:
user表(id主键索引,其余无索引):

1. 模拟A事务 查询 id =1 的数据(注意使用for update 触发行锁),故意查询完不提交事务:

2.模拟B事务,也查询id=1的数据 :

此时,发现无法查询出数据,因为id=1这行数据, 已经上了行记录锁 ,所以我们可以查看确实存在一个事务在等待锁资源:

如果我们一直让A事务不提交事务,也就是不释放锁资源,那么B事务就会一直等待,直到超时:

同样,A事务依然不提交,此时执行C事务来更新id=1的行数据,同样也是处于等待锁资源状态:

以上情况都是属于,排他锁之间的写写互斥(行记录锁 record锁属于排他锁一种实现方式)。

那么依然 A事务不提交事务,还坚持不释放锁资源, 执行事务D 查询id=1的数据(使用共享读锁S ):

 可以看到依然是处于等待锁资源状态,因为 排他锁一旦上了,是写读互斥的。

我们在这个系列里的(二)讲过跟排他锁相关的知识,如果还不清楚,可以移步 
MySQL 与InnoDB 下的锁做朋友 (二)共享锁与排他锁
MySQL 与InnoDB 下的锁做朋友 (二)共享锁与排他锁_默默不代表沉默-CSDN博客

PS:

共享锁(共享读锁)排他锁(独占写锁)
共享锁(共享读锁)可以,兼容,一起读不可以,不兼容,想写得等共享锁没了
排他锁(独占写锁)不可以,不兼容,上了排他锁,别人啥都不能动不可以,不兼容,上了排他锁,别人啥都不能动

行锁简单就介绍到这把。 

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小目标青年

对你有帮助的话,谢谢你的打赏。

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

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

打赏作者

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

抵扣说明:

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

余额充值