MySQL版本:8.0.29
测试表:
测试数据:
开始测试:
事务1执行
事务2执行
事务3执行
事务1回滚
事务3发生了死锁
死锁原因分析:
1)事务1首先insert,只有隐式锁;
2)事务2进行同样的insert,给事务1加上记录排他锁,自己加上next-key S lock,进入阻塞等待状态;
3)事务3进行同样的insert,自己加上next-key S lock,进入阻塞等待状态;
4)事务1回滚,事务2和事务3会同时获取到next-key S lock(间隙锁相互兼容),然后重新进行insert操作,发现需要插入记录的间隙存在间隙锁,然后生成一把插入意向锁,进入阻塞等待状态(等待对方的next-key S lock释放,从而死锁)
insert唯一索引死锁问题-2
最新推荐文章于 2024-05-07 19:58:54 发布