级联引用完整性约束
在关系数据库中使用主-外键的指向来表示表间的关系,当用户试图删除或更新外键所指向的键时,级联引用完整性约束使你得以定义SQL Server 2000所采取的操作。下面我们以企业管理器中的关系图来说明,图中包括三个表:table1(主键tab1_ID)、table2(主键tab2_ID)、table3(主键tab3_ID):

我们先看table1和table2之间的关系设置:

A:指定如果试图更新某行中的键值,而该行的键值由其它表的现有行中的外键所引用,则所有外键值也将更新成为该键指定的新值。如果在目标表上也定义了级联引用操作,则对在那些表中更新的键值同样采取指定的级联操作。
B:指定如果试图删除某行,而该行含有由其它表的现有行中的外键所引用的键,则也将删除所有包含那些外键的行。如果在目标表上也定义了级联引用操作,则对从那些表中删除的行同样采取指定的级联操作。
我们按照图中设置FK_table2_table1 约束,该约束建立了从 table2 表中的 tab1_ID 列到 table1 表中的 tab1_ID 主键列的外键关系。如果删除 tab1_ID = 1 的 table1 表中的行时也将删除 tab1_ID = 1 的 table2 表中的行。如果更新 table1表中的tab1_ID=1 值为2也将更新 table2 表中 tab1_ID 值当前等于1的行的 tab1_ID 值为2。
删除和更新语句可启动一系列级联引用操作。如关系图中建立FK_table3_table2约束,设置与FK_table2_table1约束相同,然后也要建立FK_table3_table1约束,设置如下图:

对于FK_table3_table1不必启用级联引用,在删除或更新所产生的所有级联引用操作的列表中,每个表只能出现一次。级联引用操作树到任何给定表的路径必须只有一个,否则将导致循环或多重级联路径而出错。
如果删除 table1 中的行,则该操作也将删除 table2 中具有与 table1 中所删除的主键匹配的任何外键中的所有行,然后删除 Table3 中具有与 Table2 中所删除的主键匹配的任何外键中的所有行。如果是更新的话也会产生级联更新的效果。系统将自动维护数据的完整。
我们使用级联引用比较典型的应用是论坛系统,假如有一个用户表、一个话题表、一个回复表,我们参照关系图建立关系,启用了级联引用后,如果有一个用户发贴、回贴后,他又想改名,那么他改了名以后,数据库将自动帮他修改保存在话题表、回复表里的用户名。