为什么要建立外键

pztx1992 2008-12-19 10:48:13
好像不建立外键也照样能够a join b on a.id=b.id
建立外键的好处能解释一下吗?
...全文
261 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
不卡碟 2010-07-19
  • 打赏
  • 举报
回复
感觉使用了外键的表删除操作的时候,有些麻烦!
水族杰纶 2008-12-19
  • 打赏
  • 举报
回复
外鍵與 JOIN 沒有必然連繫
viva369 2008-12-19
  • 打赏
  • 举报
回复
[Quote=引用楼主 pztx1992 的帖子:]
好像不建立外键也照样能够a join b on a.id=b.id
建立外键的好处能解释一下吗?
[/Quote]

表连接不受限制,连接列的数据类型会从底向高做隐式转换
viva369 2008-12-19
  • 打赏
  • 举报
回复
保证数据完整性

不过我们一般都在前台程序里控制,不用外键,有时测试比较麻烦
dawugui 2008-12-19
  • 打赏
  • 举报
回复
FOREIGN KEY 约束
外键 (FK) 是用于建立和加强两个表数据之间的链接的一列或多列。通过将保存表中主键值的一列或多列添加到另一个表中,可创建两个表之间的链接。这个列就成为第二个表的外键。

当创建或更改表时可通过定义 FOREIGN KEY 约束来创建外键。

例如,数据库 pubs 中的 titles 表与 publishers 表有链接,因为在书名和出版商之间存在逻辑联系。titles 表中的 pub_id 列与 publishers 表中的主键列相对应。titles 表中的 pub_id 列是到 publishers 表的外键。



FOREIGN KEY 约束并不仅仅只可以与另一表的 PRIMARY KEY 约束相链接,它还可以定义为引用另一表的 UNIQUE 约束。FOREIGN KEY 约束不允许空值,但是,如果任何组合 FOREIGN KEY 约束的列包含空值,则将跳过 FOREIGN KEY 约束的校验。



说明 FOREIGN KEY 约束可引用同一数据库中的表或同一表(自引用表)内的列,例如,一个包含下面三列的雇员表:employee_number、employee_name 和 manager_ employee_number。由于经理本身也是雇员,所以从 manager_employee_number 列到 employee_number 列存在外键关系。


尽管 FOREIGN KEY 约束的主要目的是控制存储在外键表中的数据,但它还可以控制对主键表中数据的修改。例如,如果在 publishers 表中删除一个出版商,而这个出版商的 ID 在 titles 表中记录书的信息时使用了,则这两个表之间关联的完整性将被破坏,titles 表中该出版商的书籍因为与 publishers 表中的数据没有链接而变得孤立了。FOREIGN KEY 约束防止这种情况的发生。如果主键表中数据的更改使之与外键表中数据的链接失效,则这种更改是不能实现的,从而确保了引用完整性。如果试图删除主键表中的行或更改主键值,而该主键值与另一个表的 FOREIGN KEY 约束值相关,则该操作不可实现。若要成功更改或删除 FOREIGN KEY 约束的行,可以先在外键表中删除外键数据或更改外键数据,然后将外键链接到不同的主键数据上去。

FOREIGN KEY 约束是索引的候选约束,其原因有以下两点:

对 PRIMARY KEY 约束的更改可由相关表中的 FOREIGN KEY 约束校验。


当在查询中组合来自相关表中的数据时,经常在联接条件中使用外键列,方法是将一个表的 FOREIGN KEY 约束中的列与另一个表中的主键列或唯一键列匹配。索引使 Microsoft® SQL Server™ 2000 得以快速查找外键表中的相关数据。但是,创建索引不是必需的。即使没有在表间定义 PRIMARY KEY 或 FOREIGN KEY 约束,也可以对来自两个相关表中的数据进行组合,但两个表间的外键关系说明已用其键作为条件对其进行了优化,以便组合到查询中。
dawugui 2008-12-19
  • 打赏
  • 举报
回复
我从来不建
mengxj85 2008-12-19
  • 打赏
  • 举报
回复
FK是为了实现完整性约束,
龙扬天 2008-12-19
  • 打赏
  • 举报
回复
外键 (FK) 是用于建立和加强两个表数据之间的链接的一列或多列。通过将保存表中主键值的一列或多列添加到另一个表中,可创建两个表之间的链接
frankie_24 2008-12-19
  • 打赏
  • 举报
回复
个人感觉用外键麻烦,至今也没有发现外键有什么好作用(除了数据的完整性)
tjg5202 2008-12-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wufeng4552 的回复:]
外鍵與 JOIN 沒有必然連繫
[/Quote].......现在都兴繁体字啊。。。。。

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧