到目前为止,在我见过的所有 SQL 死锁示例中,死锁都是在执行 SELECT
/UPDATE
等时出现的。
如果我的所有语句都成功执行,当我COMMIT
时是否有可能出现死锁?
我试图用我的 ORM 捕获死锁异常,想知道在 flush()
周围使用 try{}
是否足够,或者它是否应该包装 commit()
也是如此。
最佳答案
是的,执行 COMMIT 时可能会发生死锁。更准确地说,您的应用程序可能会在执行 COMMIT 时被告知死锁。
假设您是连接 A 并执行一些操作序列。独立地,不同的连接(连接 B)做了一些导致死锁的事情,DBMS 决定回滚连接 A。
但是,连接 A 已经完成了它想做的所有事情并决定提交。好吧,这是在 DBMS 决定执行回滚后客户端在连接 A 上执行的第一个操作,因此您会在此时收到通知。
您应该处理每个操作的错误,即使是 COMMIT。
关于mysql - 提交时会发生死锁吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18171769/