【问题标题】:Why use Foreign Key constraints in MySQL?为什么在 MySQL 中使用外键约束?
【发布时间】:2011-03-26 22:14:40
【问题描述】:

我在想,

我在 MySQL 中使用约束作为外键的动机是什么,因为我确信我可以控制添加的类型?

它会提高性能吗?

【问题讨论】:

标签: sql mysql foreign-keys


【解决方案1】:

一个原因是一组具有外键约束的表不能分片到多个数据库中。

【讨论】:

    【解决方案2】:

    Foreign keys 强制执行referential integrity。这些约束保证表order_details 中具有引用orders 表的字段order_id 的行永远不会有order_id 值在orders 表中不存在。

    外键不需要有一个工作的关系数据库(事实上MySQL's default storage 引擎不支持外键),但它们对于避免破坏关系和孤立行(即参照完整性)绝对是必不可少的。 ACID 中的 C 需要能够在数据库级别强制执行参照完整性。

    至于您对性能的担忧,通常会有性能成本,但可能可以忽略不计。我建议放入所有外键约束,并且仅在遇到无法通过其他方式解决的实际性能问题时才尝试不使用它们。

    【讨论】:

    • 不使用外键约束有什么好的理由吗?我研究过各种 php 框架,从来不需要使用它们。我觉得应用程序应该是一个处理和防止孤儿的应用程序。有人能启发我吗?
    • @AngelS.Moreno:这有点像问“有什么理由不使用垃圾收集器吗?”。只是在这种情况下,您不会通过自己管理这种 DB 垃圾来获得性能。恰恰相反。发出保持 FK 关系一致所需的所有查询不仅极易出错,而且效率极低。
    • 不使用 FK 的唯一充分理由是当您不需要一致性时。
    • 是的,有充分的理由不使用 FK 约束。在我看来,最明显的一点是您最终可能会一次锁定多行,这可能会产生意想不到的后果。我们在这里无意中这样做了,我们经常发现我们的数据库很慢并且对于某些记录完全冻结。请阅读这篇文章:percona.com/blog/2010/10/25/…
    • 如果你想重命名表格stackoverflow.com/questions/6384778/…
    猜你喜欢
    • 2012-02-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-19
    • 2011-04-22
    • 1970-01-01
    • 2016-12-09
    • 2014-02-06
    • 1970-01-01
    相关资源
    最近更新 更多