明智的做法是几年,我正在修改公认的答案,以声明无法防止数据库死锁:
锁定顺序由特定于实现的执行顺序确定。答案进一步说,没有确定的方法可以防止死锁。在命令式编程中,我们可以通过以相同的顺序获取锁来防止死锁,但是似乎在声明性系统中,当检测到死锁时,我们必须通过重试操作来解决死锁。
此外,我认为,由于数据库执行计划会在其生命周期内发生变化,因此从技术上讲,不可能防止死锁。
如果您有幸能够分解数据库操作以一次仅与一个表进行交互(这种情况并非总是可能的),那么您将不得不在性能低下和出现死锁的可能性之间进行选择。选择你的毒药。



