当前位置:网站首页>MySQL 必现之死锁
MySQL 必现之死锁
2022-08-01 09:33:00 【wzy0623】
场景1:
版本:5.6.14
隔离级别:READ-COMMITTED
复现步骤:
分析:
1. 由于数据库已经存在记录,所以事务 T1 执行 insert ignore into 会插入失败,并给该记录加了个 S 锁。
2. 由于 S 锁是相互兼容的,所以事务 T2 也给该记录加了 S 锁。
3. T1 继续执行 select for update 语句,尝试给数据加 X 锁,数据已经被 T2 加了 S 锁,此时 T1 等待 T2 释放 S 锁。
4. T2 继续执行 select for update 语句,尝试给数据加 X 锁,此时 T2 等待 T1 释放 X 锁,但T1还未获得X,出现死锁!
场景2:
版本:5.7.34
隔离级别:REPEATABLE-READ
复现步骤:
分析:
1. 事务1插入成功但未提交,在记录上加间隙锁和插入意向锁。
2. 事务2获得间隙锁,等待插入意向锁,被阻塞。
3. 事务3获得间隙锁,等待插入意向锁,被阻塞。
4. 事务1回滚,释放锁,使得事务2、3同时持有间隙锁,并等待插入意向锁,出现死锁!
边栏推荐
猜你喜欢
随机推荐
Comprehensive experiment BGP
堆内存的介绍及应用(含例子)
STM32个人笔记-看门狗
Manual upgrade and optimization tutorial of Lsky Pro Enterprise Edition
优炫数据库支持Oracle哪几种时间及日期类型
改版去不图床 Token 的获取
node 格式化时间的传统做法与高级做法(moment)
PHP获取时间戳后写数据库的一个问题
常见的API安全缺陷有哪些?
Introduction and application of heap memory (including examples)
372. 超级次方
CTO强烈禁止使用Calendar,那用啥?
various network protocols
Graduation thesis writing skills
【编程之外】当遮羞布被掀开,当人们开始接受一切
【STM32】入门(一):环境搭建、编译、下载、运行
【Untitled】
leetcode-6132:使数组中所有元素都等于零
Three chess (C language implementation)
淘宝商品详情又见淘宝详情,升级高级版 API









