当前位置:网站首页>MySQL 与InnoDB 下的锁做朋友 (四)行锁/记录锁
MySQL 与InnoDB 下的锁做朋友 (四)行锁/记录锁
2022-08-02 21:56:00 【51CTO】
前言
正文
今天我们将要认识这位朋友是 行锁,而这个行锁 我想叫他 行记录锁。
他和另外两位朋友,临键值锁、间隙锁 ,都是 行锁的实现方式。
行锁是建立在索引上的。
行记录锁当然也是了, 他是建立在当行记录上的 排他锁。
开始实战演示:
表数据准备:
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 下的锁做朋友 (二)共享锁与排他锁
PS:
共享锁(共享读锁) | 排他锁(独占写锁) | |
共享锁(共享读锁) | 可以,兼容,一起读 | 不可以,不兼容,想写得等共享锁没了 |
排他锁(独占写锁) | 不可以,不兼容,上了排他锁,别人啥都不能动 | 不可以,不兼容,上了排他锁,别人啥都不能动 |
行锁简单就介绍到这把。
边栏推荐
- mysql 错误:The driver has not received any packets from the server.
- 学习基因富集工具DAVID(2)
- Go语言如何操作文件
- iptables、firewalld的使用
- VS保存后Unity不刷新
- H.265视频流媒体播放器EasyPlayer.js集成时出现“SourceBuffer ”报错,该如何解决?
- @Transactional 事务调用与生效场景总结
- 增删改查这么多年,最后栽在MySQL的架构设计上!
- Flink-SQL
- 【DEBUG】ImportError: Unable to import required dependencies: numpy: DLL load failed: 找不到指定的模块。
猜你喜欢
圆锥折射作为偏振计量工具的模拟
【Unity】Unity开发进阶(六)UnityEvent使用与源码解析
同样月薪6K,为什么同事跳槽月薪翻倍,而你只涨了1000?
网络运维系列:健康检查的方式
What is the core business model of the "advertising e-commerce" that has recently become popular in the circle of friends, and is the advertising revenue really reliable?
总数据量超万亿行,玉溪卷烟厂通过正确选择时序数据库轻松应对
PHP实现登录失败三次需要输入验证码需求
Flink优化的方方面面
多租户的多种实现方案
FRED应用:激光二极管光源耦合到光纤的仿真
随机推荐
Towards a General Purpose CNN for Long Range Dependencies in ND
【TypeScript】深入学习TypeScript类(下)
Command line startup FAQs and solutions
CodeTON Round 2 A - D
你离「TDengine 开发者大会」只差一条 SQL 语句!
CS5213芯片|HDMI to VGA转换头芯片资料分享
搭建Spark开发环境(第二弹)
万物智联时代,悄然走入生活
Zabbix 5.0 Monitoring Tutorial (2)
2022-08-02 第六小组 瞒春 学习笔记
Interviewer: can you talk about optimistic locking and pessimistic locks
Matplotlib drawing core principles explain (more detailed)
The only way to go from a monthly salary of 10k to 30k: automated testing
如何通过开源数据库管理工具 DBeaver 连接 TDengine
IP Protocol (Internet Protocol)
Unity WallFxPack使用
【Unity】Unity开发进阶(六)UnityEvent使用与源码解析
测试ESP32-Zigbee转发命令 : 滑轨、继电器控制
LeetCode 2359. 找到离给定两个节点最近的节点 基环树
创建型模式 - 抽象工厂模式AbstractFactory