当前位置:网站首页>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:
共享锁(共享读锁) | 排他锁(独占写锁) | |
共享锁(共享读锁) | 可以,兼容,一起读 | 不可以,不兼容,想写得等共享锁没了 |
排他锁(独占写锁) | 不可以,不兼容,上了排他锁,别人啥都不能动 | 不可以,不兼容,上了排他锁,别人啥都不能动 |
行锁简单就介绍到这把。
边栏推荐
猜你喜欢

宝塔搭建实测-基于ThinkPHP5.1的wms进销存源码

【c】操作符详解(一)

搭建Spark开发环境(第二弹)

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?

学习基因富集工具DAVID(2)

Matplotlib drawing core principles explain (more detailed)

Ruoyi integrates minio to realize distributed file storage

第十章 时序与延迟

GameStop NFT 市场分析

命令行启动常见问题及解决方案
随机推荐
CS5213 chip | HDMI to VGA converter chip data sharing
Kubernetes 进阶训练营 网络
Do you understand the factory pattern?
最近火爆朋友圈的“广告电商”,核心商业模式是什么,广告收入真实靠谱吗?
如何抓住NFT、元|宇|宙新趋势?
Ruoyi integrates minio to realize distributed file storage
iptables、firewalld的使用
万物智联时代,悄然走入生活
字节内部技术图谱 惊艳级实用
SRv6网络演进面临的挑战
Unity WallFxPack使用
圆锥折射作为偏振计量工具的模拟
【Unity】Unity开发进阶(七)双刃剑:扩展方法
我用这一招让团队的开发效率提升了 100%!
LeetCode 2360. 图中的最长环 基环树找环+时间戳
today‘s task
若依如何实现添加水印功能
# 医院管理系统完整项目代码以及数据库建表语句分享
谷粒商城-day14-商城业务与压力测试
【学习笔记】博弈论