当前位置:网站首页>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同时持有间隙锁,并等待插入意向锁,出现死锁!
边栏推荐
猜你喜欢
随机推荐
Shell: Conditional test action
node 格式化时间的传统做法与高级做法(moment)
Leetcode - 6135: the longest part of the figure
可视化——Superset安装与部署
HoloView--live data
How to query database configuration parameters in GBase 8c, such as datestyle
GBase 8c中怎么查询数据库配置参数,例如datestyle
指针的介绍及应用
Parsing MySQL Databases: "SQL Optimization" vs. "Index Optimization"
Go-Excelize API源码阅读(八)——GroupSheets(sheets []string)、UngroupSheets()
网络个各种协议
Leicester Weekly 304 6135. The longest ring in the picture Inward base ring tree
HoloView -- Tabular Datasets
Ogg synchronizes oracle to mysql, there may be characters that need to be escaped in the field, how to configure escape?
Analysis of High Availability Solution Based on MySql, Redis, Mq, ES
leetcode 42. Catch the rain
372. 超级次方
STM32个人笔记-看门狗
Shell:条件测试操作
Redis中间件(从搭建到弃坑)









