当前位置:网站首页>字节二面被问到mysql事务与锁问题,我蚌埠住了
字节二面被问到mysql事务与锁问题,我蚌埠住了
2022-08-04 17:13:00 【InfoQ】


准备工作
CREATE TABLE `t_student` (
`id` int NOT NULL,
`no` varchar(255) DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
`age` int DEFAULT NULL,
`score` int DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

开始实验
- MySQL 版本:8.0.26
- 隔离级别:可重复读(RR)

为什么会发生死锁?
Time 1 阶段加锁分析
# 事务 A
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
mysql> update t_student set score = 100 where id = 25;
Query OK, 0 rows affected (0.01 sec)
Rows matched: 0 Changed: 0 Warnings: 0

- 表锁:X 类型的意向锁;
- 行锁:X 类型的间隙锁;
- 如果 LOCK_MODE 为X,说明是 next-key 锁;
- 如果 LOCK_MODE 为X, REC_NOT_GAP,说明是记录锁;
- 如果 LOCK_MODE 为X, GAP,说明是间隙锁;
Time 2 阶段加锁分析
# 事务 B
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
mysql> update t_student set score = 100 where id = 26;
Query OK, 0 rows affected (0.01 sec)
Rows matched: 0 Changed: 0 Warnings: 0

- 表锁:X 类型的意向锁;
- 行锁:X 类型的间隙锁;
Time 3 阶段加锁分析
# Time 3 阶段,事务 A 插入了一条记录
mysql> insert into t_student(id, no, name, age,score) value (25, 'S0025', 'sony', 28, 90);
/// 阻塞等待......

- 每插入一条新记录,都需要看一下待插入记录的下一条记录上是否已经被加了间隙锁,如果已加间隙锁,那 Insert 语句会被阻塞,并生成一个插入意向锁 。
Time 4 阶段加锁分析
# Time 4 阶段,事务 B 插入了一条记录
mysql> insert into t_student(id, no, name, age,score) value (26, 'S0026', 'ace', 28, 90);
/// 阻塞等待......

总结
边栏推荐
- 】 【 LeetCode daily one problem - 540. The order of a single element of the array
- 提高图片清晰度的快速方法?
- 两个对象相同数据赋值
- R语言ggplot2可视化:使用patchwork包的plot_layout函数将多个可视化图像组合起来,nrow参数指定行的个数、byrow参数指定按照列顺序排布图
- 机器学习(十七):网格搜索(Grid Search)和SVM
- shell脚本详解-------循环语句wuile循环和until循环
- 跨域传递数据(iframe)
- Qt自动补全之QCompleter使用
- 【商家联盟】云平台—异业联盟,打造线上线下商业相结合的系统
- 【小程序】实现发动态功能
猜你喜欢

适配器模式

LeetCode 每日一题——1403. 非递增顺序的最小子序列

开发一套高容错分布式系统

一张图片怎么旋转90度。利用ps

Understand Chisel language. 32. Chisel advanced hardware generator (1) - parameterization in Chisel

Learning to Explore - Setting the Foreground Color for Fonts

力拓信创生态,博睿数据多款产品获得东方通与达梦数据库产品兼容互认证明

NLP未来,路在何方?从学术前沿和业界热点谈起

yarn详细入门教程

RecyclerView 缓存与复用机制
随机推荐
SAP 电商云 Spartacus UI 页面布局的设计原理
机器学习(十三):支持向量机(SVM)
移动平台助力推进智慧型科研院所信息化建设
Boost library study notes (1) Installation and configuration
The use of QCompleter for Qt auto-completion
软件基础的理论
WEB 渗透之逻辑漏洞
全球电子产品需求萎靡:三星越南工厂大幅压缩产能,减少工人工作日
重新审视分布式系统:永远不会有完美的一致性方案……
LeetCode 0168. Excel表列名称
R语言ggpubr包的ggline函数可视化折线图、设置add参数为mean_se和dotplot可视化不同水平均值的折线图并为折线图添加误差线(se标准误差)和点阵图、设置折线和数据点边框颜色
Unity Apple登录接入
SAP ABAP SteammPunk 蒸汽朋克的最新进展 - 嵌入式蒸汽朋克
【论文阅读】Decision Transformer: Reinforcement Learning via Sequence Modeling
.NET云原生应用发展论坛--8月7日邀你一起云上探索
小程序+自定义插件的混合模式
R语言时间序列数据算术运算:使用diff函数计算时间序列数据的逐次差分、使用时间序列之间的除法计算相对变化率(乘以100获得百分比)
设置表头颜色
Digital-intelligent supply chain management system for chemical manufacturing industry: build a smart supply system and empower enterprises to improve production efficiency
全世界国家和地区国家顶级域名对照表