为什么在MySQL中使用外键约束?

Dej*_*ell 42 mysql sql foreign-keys

我在想,

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

它会提高性能吗?

Dan*_*llo 65

外键强制引用完整性.这些约束保证表中order_details具有order_id引用表的字段的行orders永远不会具有表order_id中不存在的值orders.

外键不需要具有工作关系数据库(实际上MySQL的默认存储引擎不支持FK),但它们对于避免破坏关系和孤立行(即参照完整性)是必不可少的.是必需的在数据库级别实施参照完整性的能力ÇACID站.

至于您对性能的担忧,通常会有性能成本,但可能会忽略不计.我建议你输入你所有的外键约束,如果你有其他你无法解决的真正的性能问题,只能在没有它们的情况下进行实验.

  • 不使用FK的唯一好处是不需要一致性. (8认同)
  • 为什么不使用外键约束有什么好的理由?我已经在各种PHP框架上工作,从来没有需要使用它们.我觉得应用程序应该是处理和防止孤儿的应用程序.有人可以开导我吗? (3认同)
  • @ AngelS.Moreno:这有点像问"有没有理由不使用垃圾收集器?".只是在这种情况下,你不会通过自己管理这种数据库垃圾来获得性能.恰恰相反.发出保持FK关系一致所需的所有查询不仅非常容易出错,而且效率极低. (3认同)
  • 是的,没有使用FK约束的充分理由.在我看来,最明显的一点是你最终可能会同时锁定多行,这可能会产生意想不到的后果.我们无意中在这里做了这个,我们经常发现我们的数据库很慢,并且完全冻结了某些记录.请阅读这篇文章:https://www.percona.com/blog/2010/10/25/impact-of-the-sort-buffer-size-in-mysql/ (3认同)