首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是MySQL外键?

什么是MySQL外键?
EN

Stack Overflow用户
提问于 2010-09-15 22:21:25
回答 3查看 7.6K关注 0票数 16

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

代码语言:javascript
复制
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)
);

我从来没有使用过‘外键’关系关键字。

  • 那是什么?
  • 为什么人们要用它?
  • 除了语义学之外,它还有什么好处吗?
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-09-15 22:22:42

外键是对另一个表中的主键或表本身的引用。它用于所谓的http://en.wikipedia.org/wiki/Referential_integrity。基本上在您提供的表中,要将记录插入到Favorites中,您必须从Users表中提供一个有效的movie_id,从Movies表中提供一个有效的movie_id。使用外键强制后,我无法从UsersMovies中删除记录。如果我没有外键,我可以删除那些记录。如果我在Favorites上做了一个Favorites,它就会崩溃。

维基百科

票数 14
EN

Stack Overflow用户

发布于 2010-09-15 22:26:52

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

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

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

票数 12
EN

Stack Overflow用户

发布于 2010-09-15 22:43:49

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3722298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档