在我到目前为止看到的所有SQL死锁示例中,执行SELECT
/ UPDATE
等时出现了死锁。
如果我的所有陈述都成功执行,我COMMIT
时是否有可能出现死锁?
我正在尝试使用我的ORM捕获死锁异常,并想知道在try{}
周围使用flush()
是否足够,或者是否应该包裹commit()
。
答案 0 :(得分:2)
是的,执行COMMIT时可能会发生死锁。更准确地说,您的应用程序在执行COMMIT时可能会被告知死锁。
假设您是连接A并执行某些操作序列。独立地,不同的连接(连接B)会导致一些导致死锁的事情,并且DBMS决定回滚连接A.
然而,连接A完成了它想要做的所有事情并决定COMMIT。好吧,这是DBMS决定执行回滚后客户端在连接A上执行的第一个操作,因此您会在此时收到通知。
您应该在每个操作上处理错误,甚至是COMMIT。