当前位置:网站首页>字节二面被问到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);
/// 阻塞等待......
总结
边栏推荐
猜你喜欢
JVM内存和垃圾回收-08.方法区
Catering Supply Chain Management System
通关剑指 Offer——剑指 Offer II 010. 和为 k 的子数组
15 days to upgrade to fight monsters and become a virtual fashion creator
学习探索-网站中引入百度统计
学习探索-给字体设置前景色
多线程学习笔记-3.并发容器
如何模拟后台API调用场景,很细!
shell脚本详解-------循环语句wuile循环和until循环
【 Gazebo introductory tutorial] speak the second model library into robot modeling and visualization (editor) model
随机推荐
LeetCode 1403.非递增顺序的最小子序列
重新审视分布式系统:永远不会有完美的一致性方案……
WEB 渗透之XXE&XML
NLP未来,路在何方?从学术前沿和业界热点谈起
【LeetCode每日一题】——540.有序数组中的单一元素
为什么买域名必须实名认证?这样做什么原因?
WEB 渗透之SSTI 模板注入
接口测试项目(非常值得练手)
智慧场馆的无人值守怎么做?
小程序+自定义插件的混合模式
Cron表达式
WEB 渗透之越权
基于clipboard.js对复制组件的封装
R语言dplyr包group_by函数和summarise_at函数计算dataframe计算不同分组的计数个数和均值、使用%>%符号将多个函数串起来
多线程学习笔记-3.并发容器
win11如何退出安全模式
Learning to Explore - Setting the Foreground Color for Fonts
Clearance sword refers to Offer——The sword refers to Offer II 010. and the sub-array of k
集群监控——Zabbix使用
小满nestjs(第一章 介绍nestjs)