mysql先删后增导致死锁

本文详细阐述了MySQL中删除操作引发的间隙锁机制,包括普通非唯一索引下的删除行为、不同索引类型对删除操作的影响、死锁的可能性以及如何通过调整索引来避免死锁。同时讨论了死锁日志在诊断中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.使用一个普通非唯一索引进行删除会加间隙锁

2.共享间隙锁和排他间隙锁,是可以共存的,多个事务可以对同一个间隙进行加锁

3.多个事务拥有相同的间隙锁,再同时对该间隙插入数据,死锁发生

4.而对于不存在的记录,在RR级别下,delete加锁类型为gap lock

5.gap锁与gap锁之间不冲突,rec insert intention(插入意向锁)与gap锁冲突

解决:避免不必要的删除操作

delete 的加锁方式

1.在非唯一索引的情况下,删除一条存在的记录是有gap锁,锁住记录本身和记录两边的gap
2.在唯一索引和主键的情况下删除一条存在的记录,因为都是唯一值,进行删除的时候,是不会有gap存在
3.非唯一索引,唯一索引和主键在删除一条不存在的记录,均会在这个区间加gap锁

4.通过非唯一索引和唯一索引去删除一条标记为删除的记录的时候,都会请求该记录的行锁,同时锁住记录之前的gap

5.RC 情况下是没有gap锁的,除了遇到唯一键冲突的情况,如插入唯一键冲突。

死锁日志说明

MySQL(二十四)-解读死锁日志 | HoleLin's Blog

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值