当前位置:网站首页>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同时持有间隙锁,并等待插入意向锁,出现死锁!
边栏推荐
猜你喜欢

Leetcode - 6135: the longest part of the figure

opencv创建窗口—cv.namedWindow()
Get the Token from the revised version of Qubutu Bed

Analysis of High Availability Solution Based on MySql, Redis, Mq, ES

The use of scrapy crawler framework

Leicester Weekly 304 6135. The longest ring in the picture Inward base ring tree

【STM32】入门(二):跑马灯-GPIO端口输出控制
![ASP.NET Core 6框架揭秘实例演示[30]:利用路由开发REST API](/img/b3/0167c22f14b97eb0206696495af7b5.png)
ASP.NET Core 6框架揭秘实例演示[30]:利用路由开发REST API

The soul asks: How does MySQL solve phantom reads?

Meeting OA (Upcoming Meetings & All Meetings)
随机推荐
杰理AD14N/AD15N---串口中断问题
BGP综合实验
静态Pod、Pod创建流程、容器资源限制
Introduction and application of heap memory (including examples)
STM32个人笔记-嵌入式C语言优化
Intensive reading of ACmix papers, and analysis of its model structure
最新的Cesium和Three的整合方法(附完整代码)
rpm和yum
【STM32】入门(二):跑马灯-GPIO端口输出控制
How to get page data
安装GBase 8c数据库的时候,报错显示“Resource,如何解决?
leetcode-6135:图中的最长环
【STM32】入门(一):环境搭建、编译、下载、运行
Optimal dazzle Oracle database support what kinds of type of the time and date
杨辉三角(c语言实现)
如何保证数据库与缓存数据一致性?
【软件架构模式】MVVM模式和MVC模式区别
leetcode-6132:使数组中所有元素都等于零
Redis学习
VS“无法查找或打开PDB文件”是怎么回事?如何解决