我对如何处理innodb中的死锁感到困惑。这是我在网上找到的公共场景:
while (some deadlock condition)
{
try {
begin transaction
query 1
query 2 // let's assume this one failed with a deadlock
...
query N
commit
}
catch {
make sure it's a deadlock AND
rollback
}
}
答案 0 :(得分:1)
事务死锁导致InnoDB 回滚整个事务。发生这种情况时重试整个交易。
答案2:
如果事务隔离级别低于SERIALIZABLE
(或者如果在事务之外运行),则No:
除非事务隔离级别设置为SELECT ... FROM
,否则
SERIALIZABLE
是一致的读取,读取数据库的快照和设置无锁。
是SERIALIZABLE
:
对于
SERIALIZABLE
级别,搜索会在遇到的索引记录上设置共享的下一键锁定。
通常,您必须编写应用程序,以便在由于死锁而回滚时,它们始终准备重新发出事务。
SELECT
也可能只是超时,等待来自其他交易的锁(例如表锁)。