MySQL 死锁场景

SESSION 1SESSION 2SESSION 3
START TRANSACTIONSTART TRANSACTIONSTART TRANSACTION
INSERT  
 INSERT 
  INSERT
ROLLBACK  
  Deadlock

解决方案:无解决方案

 

 
SESSION 1SESSION 2
START TRANSACTIONSTART TRANSACTION
SELECT FOR UPDATE 
 SELECT FOR UPDATE
INSERT 
 INSERT
 Deadlock

解决方案:移除 SELECT FOR UPDATE,改为扑捉 INSERT 的主键冲突的错误。

 

 
SESSION 1SESSION 2
START TRANSACTIONSTART TRANSACTION
DELTE WHERE a 
 DELTE WHERE a
INSERT VALUES(a) 
 INSERT VALUES(a)
 Deadlock

解决方案:先判断是否存在,存在时更新,不存在时插入

 

 
SESSION 1SESSION 2SESSION 3
START TRANSACTIONSTART TRANSACTION 
INSERT  
 INSERT 
  INSERT
COMMIT  
 SELECT FOR UPDATE 
  SELECT FOR UPDATE
  Deadlock

解决方案:将SELECT FOR UPDATE 改为 SELECT LOCK IN SHARE MODE

 

 
SESSION 1SESSION 2
START TRANSACTIONSTART TRANSACTION
UPDATE a 
 UPDATE b
UPDATE b 
 UPDATE a
 Deadlock

解决方案:请保持写表顺序一致-=

转载于:https://www.cnblogs.com/tianrks/p/10590224.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值