当前位置:网站首页>字节二面被问到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);
/// 阻塞等待......

总结
边栏推荐
- 不需要服务器,教你仅用30行代码搞定实时健康码识别
- 机器学习(十九):梯度提升回归(GBR)
- .NET云原生应用发展论坛--8月7日邀你一起云上探索
- R语言ggpubr包的ggtexttable函数可视化表格数据(直接绘制表格图或者在图像中添加表格数据)、使用ggarrange函数将表格数据和可视化图像组合起来(表格数据在可视化图像下方)
- SAP ABAP SteammPunk 蒸汽朋克的最新进展 - 嵌入式蒸汽朋克
- 通关剑指 Offer——剑指 Offer II 010. 和为 k 的子数组
- R语言ggplot2可视化:使用ggpubr包的ggbarplot函数可视化柱状图、color参数指定柱状图的边框的色彩
- Qt自动补全之QCompleter使用
- dotnet core 隐藏控制台
- 码蹄集 - MT2094 - 回文之时:第4组数据错误
猜你喜欢

服装店如何利用好积分?

JVM内存和垃圾回收-08.方法区

Digital-intelligent supply chain management system for chemical manufacturing industry: build a smart supply system and empower enterprises to improve production efficiency

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

【论文阅读】Decision Transformer: Reinforcement Learning via Sequence Modeling

集群监控——Zabbix使用

pyhon爬虫之爬取图片(亲测可用)

知乎高赞:拼多多和国家电网,选哪个?

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

御神楽的学习记录之基于FPGA的AHT10温湿度数据采集
随机推荐
44. 通配符匹配 ●●● & HJ71 字符串通配符 ●●
yarn detailed introductory tutorial
全世界国家和地区国家顶级域名对照表
【小程序】实现发动态功能
接口测试项目(非常值得练手)
机器学习(十):朴素贝叶斯
icu是哪个国家的域名?icu是什么域名?
使用Redis做某个时间段在线数统计
WEB 渗透之XXE&XML
【Gazebo入门教程】第二讲 模型库导入与可视化机器人建模(模型编辑器)
WPF 光标初始化的时候 temp 文件夹满了无法创建
R语言dplyr包group_by函数和summarise_at函数计算dataframe计算不同分组的计数个数和均值、使用%>%符号将多个函数串起来
LeetCode 1403.非递增顺序的最小子序列
Json的FastJson与Jackson
Fork/Join框架
Copycat CNN: Stealing Knowledge by Persuading Confession with Random Non-Labeled Data阅读心得
C# Sqlite database construction and use skills
Cron表达式
Learning and Exploration-Introducing Baidu Statistics to the Website
【商家联盟】云平台—异业联盟,打造线上线下商业相结合的系统