mysql insert导致死锁的案例介绍


本篇内容介绍了“mysql insert导致死锁的案例介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!两个insert语句发生死锁的案例。
一. 准备数据二. 发起如下事务会话1会话2会话3begin;delete from t1 where a=1;begin;insert into t1 select 1;begin;insert into t1 select 1;CommitERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction简单理解下,删除数据的会话持有X锁,导致两条insert语句需要等待,这没问题,但是为什么删除提交后,两个竞争关系出现了死锁。show engine innodb status部分结果:可以看到会话2正在等待一个X行锁,会话3也在等待X行锁,但是同时持有一个S锁。
这个S锁是怎么来的呢?当进行唯一性冲突检测时,需要先加一个 S 锁。那么整个过程就是如下所示会话1会话2会话3begin;delete from t1 where a=1;持有a=1就的X行锁begin;insert into t1 select 1;为了判断唯一性,请求a=1的next-key lock S锁被阻塞,等待begin;insert into t1 select 1;为了判断唯一性,请求a=1的next-key lock S锁被阻塞,等待Commit释放a=1上的锁拿到a=1的next-key lock S锁,继续尝试拿a=1的X 行锁,但是被会话3的S锁阻塞拿到a=1的next-key lock S锁,继续尝试拿a=1的X 行锁,尝试拿到a=1的X 行锁,但是被会话2的S锁阻塞。触发死锁ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction“mysql insert导致死锁的案例介绍”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以开发云主机域名关注开发云网站,小编将为大家输出更多高质量的实用文章!

相关推荐: 解决MySQL主从复制不一致问题的主要几个方法

下面讲讲关于解决MySQL主从复制不一致问题的主要几个方法,文字的奥妙在于贴近主题相关。所以,闲话就不谈了,我们直接看下文吧,相信看完解决MySQL主从复制不一致问题的主要几个方法这篇文章你一定会有所受益。 1.网络的延迟由于mysql主从复制是基于binlo…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 06/20 12:30
下一篇 06/20 12:30

相关推荐