社区
MS-SQL Server
帖子详情
为什么要建立外键
pztx1992
2008-12-19 10:48:13
好像不建立外键也照样能够a join b on a.id=b.id
建立外键的好处能解释一下吗?
...全文
349
10
打赏
收藏
为什么要建立外键
好像不建立外键也照样能够a join b on a.id=b.id 建立外键的好处能解释一下吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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].......现在都兴繁体字啊。。。。。
外键
到底是什么,有什么用,为什么要
建立
外键
本文探讨了如何通过主键和
外键
的设置实现两个数据表之间的关联,确保B表作为A表的扩展时,所有非空的商品名称都能够在A表中找到对应的价格和保质期信息。
oracle如何创建
外键
列,为什么子表
外键
列需要
建立
索引?(上)
本文通过实验探讨了Oracle数据库中
外键
约束如何影响DML操作的锁行为。在没有
外键
时,Oracle采用行级锁,确保并发DML操作。但在存在
外键
约束的情况下,对主表的DML操作会引发对子表的共享锁,而子表的操作也会对父表产生影响。当子表无索引时,对主表的DELETE操作不会影响锁结构,但添加索引后,DELETE操作会引发锁。实验展示了
外键
和索引如何影响并发会话的锁行为,揭示了数据库完整性约束对并发性能的影响。
jpa 每次启动都要创建
外键
索引_为什么子表
外键
列需要
建立
索引?(下)
实验表明,在主
外键
关联的表中,无索引时DML操作可能导致锁升级和阻塞现象。
建立
索引能有效避免这种问题,提高并发性能并优化关联查询效率。因此,建议在
建立
外键
关联时务必创建索引,以保障数据库系统的稳定运行。
为什么子表
外键
列需要
建立
索引?(上)
本文通过实验探讨了Oracle数据库中
外键
约束如何影响DML操作的锁机制,包括不同操作对
外键
列索引的需求及影响。
为什么子表
外键
列需要
建立
索引?(下)
本文通过实验对比分析了在有无索引的情况下,对数据库表进行DML操作时锁行为的变化,强调了在
外键
列上
建立
索引的重要性。
MS-SQL Server
34,876
社区成员
254,639
社区内容
发帖
与我相关
我的任务
MS-SQL Server
MS-SQL Server相关内容讨论专区
复制链接
扫一扫
分享
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章