在MySQL中使用外键还是不使用?

Jas*_*vis 6 mysql foreign-keys

我已经使用MySQL DB编码了几年,而且我从未使用过外键.现在,我知道外键就像一个表上的ID,它与另一个表的主键相对应.我的网站上有一个用户表,可能还有大约10个其他表都与我的用户表的主键相对应 - 但是它们没有设置为外键.

没有这10个其他表有外键我错过了什么?我的意思是,据我所知,他们基本上是一个外键,除了他们没有在DB中保存/分配它们的值.

这里有其他一些好处,我只是不知道吗?

我也意识到主键不能为空,但外键可以是.在我的情况下,这将永远不会成为问题,因为我的用户表已创建,并且当新用户添加到我的用户表时,我将其相应的条目添加到其他10个表中.

Joe*_*rns 6

添加外键总是一个好主意 - 至少我从未见过令人信服的理由不使用它们.

  • 强制执行引用完整性(如果子项存在,则无法删除父项,无法插入孤立项或父项ID无效的子项)
  • 作为索引
  • 使用外键,无论数据如何被访问,无论是通过应用程序,自动化过程,还是终端上没有咖啡因的人,都统一执行规则.


Qua*_*noi 3

AFOREIGN KEY有两个目的:

  • 它确保您的关系始终保持一致,但需要一些检查开销
  • 它(有争议地)简化了级联更新和删除。

在大多数情况下,可以使用其他工具更有效地实现此功能。