一些数据库功能,例如SELECT ... FOR UPDATE
and ON DELETE CASCADE
,隐式地容易受到死锁的影响,因为数据库没有指定将使用什么锁定顺序。我发现two 讨论这暗示 SQL 标准并未指定此行为,更不用说具体的实现了。因此,我假设我们无法控制锁定顺序(至少,如何做到这一点并不明显)。
如果我们不能依赖锁定顺序,我们应该如何避免数据库死锁?
如果我们不应该避免僵局(你将不得不非常努力地说服我这一点)那么我们应该做什么?
这个问题与数据库无关,所以请不要问我正在使用哪个数据库。
只是不要使用那些可能导致死锁的功能。ON DELETE CASCADE
可以以强制执行顺序的方式重写,从而避免死锁。
SELECT ... FOR UPDATE
专门设计用于允许您避免锁定——它允许您选择并锁定一行,以便您可以在所有线程上保持一致的顺序。
您必须小心使用它,如果您不了解所有更新的锁定顺序,可能会导致死锁。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)