首页 理论教育数据库技术与应用教程:引用完整性解析

数据库技术与应用教程:引用完整性解析

【摘要】:引用完整性也称为参照完整性约束,或关联完整性约束,或外部约束关系,或外部键约束。在SQL Server 2012中,引用完整性就是通过定义外键关系来实现的。图8—22选择“关系”选项图8—23“外键关系”对话框选择“表和列规范”选项,弹出“表和列”对话框。引用完整性约束在表的“键”中以键对象的形式存在,它以”图标(灰色)表示,如图8-27所示。

引用完整性也称为参照完整性约束,或关联完整性约束,或外部约束关系,或外部键约束。它保证在主键(在被参照表中,也称为主键表)和外部键(在参照表中,也称为外键表)之间的关系总是得到维护。例如,在Student表中有StudentⅠD列,在Mark表中也有StudentⅠD列。它们名称相同,表达意义也相同,所以它们之间存在参照完整性,即Mark表的StudentⅠD列取值参照Student表的StudentⅠD列取值。在SQL Server 2012中,引用完整性就是通过定义外键关系来实现的。

在表结构设计器中设置外键关系,可以在主键表中进行,也可在外键表中进行。在“SQL Server 2012”中通常在外键表中操作。例如打开Mark表,在表结构设计器中右键点击,在弹出的快捷菜单中选择“关系”选项,如图8-22所示,进入“外键关系”对话框,单击“添加”按钮,添加一个新外部关系对象,如图8-23所示。

图8—22 选择“关系”选项

图8—23 “外键关系”对话框

选择“表和列规范”选项,弹出“表和列”对话框。用户选择主键表和主键列,以及外键表和外部键列。注意:设置时主键表和外键表的列应该对应(例如Student表的StudentⅠD列对应Mark表的StudentⅠD列),而且列数也应相同,如图8-24所示。

图8—24 “表和列”对话框

确定退出后,在“外键关系”对话框中,展开“ⅠNSERT和UPDATE规范”选项,如图8-25所示。

图8—25 展开“INSERT和VPDATE规范”选项

“更新规则”和“删除规则”选项有四个选项设置:不执行任何操作、级联、设置Null、设置默认值。默认设置是“不执行任何操作”,即当表被设置有外部约束关系,则主键表不能修改涉及外部键值记录的主键值,主键表不能删除涉及外部键值的记录;外键表不能添加主键表主键值范围之外的记录,外键表不能将涉及主键表主键值的外部键值修改到主键值范围之外。例如修改Student表的某个StudentⅠD列值,正好这个StudentⅠD列值在Mark表的StudentⅠD列中存在,这时不允许修改。又例如删除Student表的某条记录,正好这条记录的StudentlD列值在Mark表的StudentⅠD列中存在,这时不允许删除。又例如向Mark表中添加新记录,这条新记录StudentlD列值不在Student表的StudentⅠD列值范围内,不允许添加。又例如修改Mark表中记录,这条记录StudentⅠD列值修改过后不在Student表的StudentⅠD列值范围内,不允许修改。当违反外部约束关系时,系统提示错误信息,如图8-26所示。

(www.chuimin.cn)

图8—26 违反外部约束关系

如果“更新规则”和“删除规则”选项设置为“级联”,上述操作有的可以执行。当主键表如果修改或删除涉及外部键值记录的主键值或记录,自动“级联”修改或删除涉及的外部键值或记录,即“级联”允许主键表执行任何操作。最后点击确定并保存,即外部关系约束设置成功。

按照上述操作,设置Mark表CourselD与Course表的CourselD列的外键关系。

引用完整性约束是表对象,在表的“键”中可以查看。引用完整性约束在表的“键”中以键对象的形式存在,它以”图标(灰色)表示,如图8-27所示。

图8—27 外键关系对象

如果外键关系对象需要重命名或删除,可以选择右键快捷菜单相应选项。如果修改外键关系设置,可以在“外键关系”对话框中操作,如图8-28所示。如果删除的表设置有外键关系,必须先删除参照表(外键表),再删除被参照表(主键表)。

图8—28 修改外键关系

使用T-SQL语句也可以实现外部约束关系。在ALTER TABLE语句中,使用FOREⅠGN KEY子句和REFERENCES子句实现。

使用T-SQL语句创建外键关系,FOREⅠGN KEY子句后面指定本表的外部键对应的列名,REFERENCES子句后面指定主键表表名和主键的列名。

当使用ⅠNSERT、UPDATE、DELETE语句违反外部约束关系时,系统也会提示错误信息。