代码之家  ›  专栏  ›  技术社区  ›  Delan Azabani

什么是MySQL外键?

  •  15
  • Delan Azabani  · 技术社区  · 15 年前

    在堆栈溢出的答案中,我看到了以下代码:

    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)
    );
    

    我以前从未使用过“foreign key”relationship关键字。

    • 这是怎么一回事?
    • 为什么人们使用它?
    • 除了语义之外,它还有什么好处吗?
    3 回复  |  直到 15 年前
        1
  •  14
  •   Daniel A. White    15 年前

    外键是对另一个表中的主键或表本身的引用。它被用来做所谓的 referential integrity . 基本上在您提供的表中,为要插入的记录 Favorites -你必须提供一个有效的 user_id Users 表,和一个有效的 movie_id Movies 表。使用外键强制,无法从中删除记录 用户 影视 . 如果我没有外键,我可以删除那些记录。如果我做了 SELECT ... JOIN 收藏夹 它会破裂的。

    Wikipedia .

        2
  •  12
  •   Mark Byers    15 年前

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

    • 您可以强制一个值在一个表中,那么它也必须存在于另一个表中。任何试图打破此约束的尝试都将导致错误。
    • 它允许数据库管理员或程序员通过查看表定义更容易理解表之间的关系。
    • 它允许工具检查模式并绘制显示表之间关系的图表,或者创建类,在这些类中,可以通过成员从父级访问对象的子级。
    • 在innodb中,添加一个外键也会自动在该列上添加一个索引,这样可以在任意方向上有效地进行连接。( Source )

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

        3
  •  1
  •   Collin White    15 年前

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