什么是MySQL外键?

时间:2010-09-15 22:21:25

标签: mysql

在Stack Overflow的答案中,我看到了这段代码:

CREATE TABLE Favorites (
    user_id INT NOT NULL,
    movie_id INT NOT NULL,
    PRIMARY KEY (user_id, movie_id),
    FOREIGN KEY (user_id) REFERENCES Users(user_id),
    FOREIGN KEY (movie_id) REFERENCES Movies(movie_id)
);

我之前从未使用过'外键'关系关键字。

  • 这是什么?
  • 为什么人们会使用它?
  • 它是否提供除语义之外的任何好处?

3 个答案:

答案 0 :(得分:14)

外键是对另一个表中的主键或表本身的引用。它用于所谓的 referential integrity 。基本上在您提供的表格中,要将记录插入Favorites - 您必须从user_id表格中提供有效的Users,并从中提供有效的movie_id Movies表。使用外键时,我无法从UsersMovies删除记录。如果我没有外键,我可以删除这些记录。然后,如果我在SELECT ... JOIN上执行Favorites,它就会中断。

请参阅Wikipedia

答案 1 :(得分:12)

外键描述了两个表之间的关系。它有很多好处:

  • 您可以强制执行,如果值在一个表中,则它也必须存在于另一个表中。任何破坏此约束的尝试都会产生错误。
  • 通过查看表定义,它允许数据库管理员或程序员更轻松地理解表之间的关系。
  • 它允许工具检查模式并绘制显示表之间关系的图表,或者创建可以通过成员从父级访问对象子级的类。
  • 在InnoDB中添加外键还会自动在该列上添加索引,以便可以在任一方向上有效地进行连接。 (Source

如果您使用的是MyISAM,则不支持外键。

答案 2 :(得分:1)

您还可以添加删除相关记录时级联的功能。例如,如果我在相关的“book”表中有一个包含许多书籍的库表,并且我从库表中删除了一个给定的库,那么它的相关书籍记录也将被删除。