没有事务如何出现死锁?

14

我的代码有点混乱,我不确定问题出在哪里,但是我没有使用任何事务或表锁定就出现了死锁。任何关于此的信息都会有所帮助。

我查了一下死锁,似乎唯一会引起死锁的方式就是使用事务。

Error Number: 1213
Deadlock found when trying to get lock; try restarting transaction
UPDATE `x__cf_request` SET `contact_success` = 1, `se_engine_id` = 0, `is_fresh` = 1 WHERE `id` =  '28488'

编辑:为什么会有负评?这是一个合理的问题。如果不可能,请说明原因,以便其他人在遇到此问题时可以看到。


很遗憾你被踩了。我也遇到了类似的问题,你的问题是我找到的最接近需要答案的...如果你解决了,请告诉我们! - Shane N
1个回答

2
在InnoDB中,每个语句都在一个事务中运行;使用BEGIN和autocommit=0来进行多语句事务。话虽如此,死锁发生在不同的事务之间。
看起来你没有在id字段上建立索引,或者有多条记录具有相同的id。如果没有,那么你就有了索引间隙锁定。要进一步诊断,需要提供SHOW ENGINE InnoDB STATUS的输出。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接