当前位置:网站首页>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同时持有间隙锁,并等待插入意向锁,出现死锁!
边栏推荐
- 杰理AD14N/AD15N---串口中断问题
- 【面试:并发篇39:多线程:线程池】ThreadPoolExecutor类-提交、停止
- Static Pod, Pod Creation Process, Container Resource Limits
- 50.【Application of dynamic two-dimensional array】
- C language game - minesweeper
- ASP.NET Core 6 Framework Revealing Instance Demonstration [30]: Develop REST API with Routing
- rpm and yum
- SkiaSharp 之 WPF 自绘 五环弹动球(案例版)
- 【STM32】入门(一):环境搭建、编译、下载、运行
- Redis学习
猜你喜欢
随机推荐
自定义IP在PCIE中使用
《时代》杂志:元宇宙时代将改变世界
网络个各种协议
将Servlet项目改为SSM项目
Lsky Pro 企业版手动升级、优化教程
ogg同步oracle到mysql,字段里面可能有需要转义的字符,怎么配置转义?
Naive Bayes--Study Notes--Basic Principles and Code Implementation
Quantify daily work metrics
【无标题】
sqlserver怎么查询一张表中同人员的交叉日期
How to implement deep copy in js?
常见的API安全缺陷有哪些?
Get the Token from the revised version of Qubutu Bed
指针的介绍及应用
Mysql database deployment and initialization steps
HoloView -- Tabular Datasets
STM32个人笔记-程序跑飞
网络基础学习
leetcode-6135:图中的最长环
50.【Application of dynamic two-dimensional array】








