什么是MySQL外键?

Del*_*ani 15 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)
);
Run Code Online (Sandbox Code Playgroud)

我以前从未使用过'外键'关系关键字.

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

Dan*_*ite 14

外键是对另一个表中的主键或表本身的引用.它用于所谓的引用完整性.基本上在您提供的表中,对于要插入的记录Favorites- 您必须user_idUsers表中提供有效值,并movie_idMovies表中提供有效值.使用外键执行时,我无法从Users或删除记录Movies.如果我没有外键,我可以删除这些记录.然后,如果我做了一个SELECT ... JOIN关于Favorites它会打破.

维基百科.


Mar*_*ers 12

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

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

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