当前位置:网站首页>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同时持有间隙锁,并等待插入意向锁,出现死锁!
边栏推荐
- How to query database configuration parameters in GBase 8c, such as datestyle
- Redis学习
- Get the Token from the revised version of Qubutu Bed
- leetcode-6134:找到离给定两个节点最近的节点
- 常见的API安全缺陷有哪些?
- opencv创建窗口—cv.namedWindow()
- ASP.NET Core 6框架揭秘实例演示[30]:利用路由开发REST API
- SQL Server database schema and objects related knowledge notes
- notes....
- 最新的Cesium和Three的整合方法(附完整代码)
猜你喜欢
随机推荐
微服务:事务管理
Shell: Conditional test action
笔记。。。。
消息队列面试题(2022最新整理)
HoloView--live data
【STM32】入门(一):环境搭建、编译、下载、运行
TiDB的真实数据库数据是存在kv和还是pd上?
shell脚本------条件测试 if语句和case分支语句
将aof文件转换为命令waoffle安装和使用
【数据集】各类绝缘子、鸟巢及防震锤数据集汇总
自定义IP在PCIE中使用
静态Pod、Pod创建流程、容器资源限制
Holoview--Introduction
50.【Application of dynamic two-dimensional array】
【STM32】入门(二):跑马灯-GPIO端口输出控制
ASP.NET Core 6框架揭秘实例演示[30]:利用路由开发REST API
Introduction to ADAS
ACmix 论文精读,并解析其模型结构
Three chess (C language implementation)
ASP.NET Core 6框架揭秘实例演示[30]:利用路由开发REST API