读书频道 > 网站 > 网页设计 > SQL Server数据库管理与开发实用教程
3.5.5 外键约束
15-11-06    下载编辑
收藏    我要投稿   
本书通过实例循序渐进地讲解了SQL Server 2014的理论知识和基本操作。主要内容包括:数据库的基本原理、SQL Server 2014概述、数据库和表的创建与管理、表中数据的查询、Transact_SQL、索引、视图、游标、事立即去当当网订购

外键(FOREIGN KEY)约束用于与其他表(称为参照表)中的列(称为参照列)建立连接。通过将参照表中主键所在列或具有唯一性约束的列包含在另一个表(外键表)中,这些列就构成了外键表的外键。当参照表中的参照列更新后,外键表中的外键列也会自动更新,从而保证两个表之间的一致性关系。

以sales数据库中的Product表和Category表为例,如图3-51所示。


 

CategoryID是Category表的主键,它唯一地标识了每一行Category数据。在Product表中也有CategoryID列,Product.Category

ID是Product表的外键。该外键的作用是保证每个产品的种类都必须在Category表中有记录,并且当Category表中的CategoryID列更新后,Product表中的CategoryID列也会自动更新。

1.使用Transact-SQL语句创建外键约束

创建外键约束的语法格式为:

[ CONSTRAINT constraint_name ] FOREIGN KEY (col_name1[,…n])
REFERENCES table_name(column_name1[,…n])

其中:

col_name1[,…n]:指名要实现外键约束的列。

table_name:参照表表名。

column_name1[,…n]:指名参照表中的参照列。

【例3.40】 若sales数据库中包含Seller表和Customer表。其中Seller表包含SaleID、SaleName等字段,SaleID为主键;Customer表包含CustomerID、Company等字段,CustomerID为主键。创建Orders表,包含OrderID、CustomerID、SaleID和OrderDate 4个字段,CustomerID、SaleID为外键。

CREATE TABLE Orders
(
    Orderid int PRIMARY KEY,
    CustomerID char(3) REFERENCES Customer(CustomerID),
    SaleID char(3) CONSTRAINT fk_saleid REFERENCES Seller(SaleID),
    OrderDate datetime DEFAULT getdate()
)

【例3.41】 修改OrderDetail表,在OrderID字段上创建外键约束。

ALTER TABLE OrderDetail
ADD CONSTRAINT fk_orderid
FOREIGN KEY (OrderID) REFERENCES Orders(OrderID)

注意 当将外键约束添加到一个已有数据的列上时,默认情况下,SQL Server会自动检查表中已有数据,以确保所有的数据和主键保持一致,或者为NULL。但也可以根据实际情况,设置SQL Server不检查现有数据的外键约束,例如:

ALTER TABLE OrderDetail
WITH NOCHECK
ADD CONSTRAINT fk_orderid
FOREIGN KEY (OrderID) REFERENCES Orders(OrderID)

2.使用SQL Server Management Studio创建外键约束

在SQL Server Management Studio下同样可以创建外键约束,仍以Product表和Category表为例,表Products中的外键CategoryID参考Category表中的主键CategoryID,其操作步骤如下:

1)进入SQL Server Management Studio,在左边的“对象资源管理器”窗口中选中需要添加外键约束的表,单击鼠标右键,在弹出的快捷菜单中选择“设计”命令,弹出表设计器窗口。

2)在该窗口中,在上方窗格单击鼠标右键,在弹出的快捷菜单中选择“关系”命令,弹出“外键关系”对话框,如图3-52所示。

3)单击“添加”按钮,系统给出默认的关系名,单击“表和列规范”内容框中右边的省略号按钮,从弹出的“表和列”对话框中选择外键约束的表和列,如图3-53所示。单击“确定”按钮,返回“外键关系”对话框。
 
    
 

4)设置“在创建或重新启用时检查现有数据”为“是”,指定对于在创建或重新启用约束之前就存在于表中的所有数据,根据约束进行验证。

5)将“强制外键约束”或“强制用于复制”设置为“是”,能确保任何数据添加、修改或删除操作都不会违背外键关系。

如果对主键表进行更新(Update)或删除(Delete)一行数据的操作,检查主键表的主键是否被外键表的外键引用,分为以下两种情况:

若没有被引用,则更新或删除。

若被引用,则对于下面的选项,可能发生如下4种操作之一:

不执行任何操作:拒绝更新或删除主键表,SQL Server 2014将显示一条错误消息,告知用户不允许执行该操作。

级联:级联更新或删除外键表中相应的所有行。

设置NULL:将外键表中相应的外键值设置为空值NULL。

设置默认值:如果外键表的所有外键列均已定义默认值,则将该列设置为默认值。

6)单击“更新规则”和“删除规则”对应文本框右边的下拉列表,设置“更新规则”和“删除规则”的值为“级联”,即当表Category中某种类别的数据行更新或删除时,Product表中相应产品的数据行也随之更新或删除,如图3-54所示。


 

7)单击“关闭”按钮即可完成外键约束的创建。

8)如要删除外键约束,则在该对话框的“选定的关系”列表框中选择要删除的关系,单击“删除”按钮即可。

点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.3 功能
下一篇:1.5 小结
相关文章
图文推荐
JavaScript网页动画设
1.9 响应式
1.8 登陆页式
1.7 主题式
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站