首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何避免数据库死锁?

如何避免数据库死锁?
EN

Stack Overflow用户
提问于 2013-01-02 23:53:08
回答 2查看 8.7K关注 0票数 4

某些数据库特性(如SELECT ... FOR UPDATEON DELETE CASCADE )隐式易受死锁的影响,因为数据库没有指定将使用何种锁定顺序。我发现 讨论暗示这种行为不是由SQL标准指定的,更不用说具体的实现了。因此,我的操作假设是我们无法控制锁定顺序(至少,如何做到这一点并不明显)。

如果我们不能依赖锁顺序,我们应该如何避免数据库死锁?

如果我们不应该避免死锁(为了让我相信这一点,你必须非常努力地战斗),那我们该怎么办?

这个问题是数据库无关的,所以请不要问我使用的是哪个数据库。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-31 11:51:20

再过几年,我正在修改公认的答案,声明无法防止数据库死锁。

如果您足够幸运地能够分解数据库操作,一次只能与单个表交互(这并不总是可能的),那么您就不得不在性能差和死锁的可能性之间做出选择。挑出你的毒药。

票数 -1
EN

Stack Overflow用户

发布于 2013-01-15 03:31:02

只是不要使用那些可能导致死锁的特性。ON DELETE CASCADE可以以强制命令的方式重新编写,从而避免死锁。

SELECT ... FOR UPDATE是专门为避免锁而设计的--它允许您选择并锁定一行,这样您就可以在所有线程上保持一致的顺序。

您确实需要小心使用它,如果您不了解所有更新的锁定顺序,它可能会导致死锁。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14131108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档