2010-08-08 54 views
33

我想知道,为什么在MySQL中使用外键约束?

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

是否提高性能?

+2

类似的问题已回答,请参阅 http://stackoverflow.com/questions/1876013/有很多讨论:D – 2010-08-08 10:38:32

回答

59

Foreign keys执行referential integrity。这些约束条件保证了表order_details中表的字段order_id引用orders表中的行将永远不会有值,orders表中不存在该值。

外键不需要有一个可用的关系数据库(事实上MySQL's default storage引擎不支持FK),但它们对于避免断开的关系和孤行(即参照完整性)绝对是必不可少的。在ACIDC需要站在数据库级执行参照完整性的能力。

至于您对性能的关注,一般来说会有性能成本,但可能可以忽略不计。我建议把所有的外键约束都放进去,只有在没有它们的情况下才会进行实验,如果你有真正的性能问题,那么你不能另外解决。

+2

有没有什么好的理由为什么不使用外键约束?我曾在各种PHP框架,并从来没有需要使用它们。我觉得申请应该是处理和预防孤儿的申请。有人可以启发我吗? – 2013-09-30 20:58:42

+3

@ AngelS.Moreno:这有点像问“有没有理由不使用垃圾回收器?”。只是在这种情况下,你不会通过自己管理这种DB垃圾来获得性能。恰恰相反。发布保持FK关系一致所需的所有查询不仅非常容易出错,而且效率极低。 – thesaint 2013-12-01 09:18:23

+7

不使用FK的唯一好理由是当你不需要一致性。 – thesaint 2013-12-01 09:23:00