禁用的引用约束
以下 CREATE TABLE 引用创建了 xeno_counts 表,并在它的 xeno_num 列和第一个示例中
accounts 表的 acc_num 列之间定义了引用约束。此单列约束格式语法还包含了约束定义,指定
DISABLED 作为它的约束方式,且声明 xeno_constr 作为外键约束的名称。此处 xeno_accounts 是
引用表,accounts 是被引用表。

在 DISABLED 方式,当 DML 操作在 xeno_counts 表中产生违例行时,不会执行 xeno_constr 约
束。然而,要实现参照完整性,可以使 SET Database Object Mode 语句的 SET CONSTRAINTS 选
项将约束的方式更改为 ENABLED。或者,START VIOLATION 语句将违例表与 xeno_counts 表关
联后, SET CONSTRAINTS 可将 xeno_constr 约束重设为 FILTERING 方式。
使用 ON DELETE CASCADE 选项
使用 ON DELETE CASCADE 选项来指定从父表中删除某行时,是否需要从子表中删除相应的 行。如果您不指定级联删除,则数据库服务器的缺省行为将阻止您删除表中的数据(如果有其它表 引用它)。
如果指定此选项,则稍后当您删除父表中的行时,数据库服务器还删除任何与子表中的行(外键) 相关的行。
级联删除功能最主要的好处是,需要执行删除操作时它可以减少 SQL 语句的数量。 例如,all_candy 表中包含的 candy_num 列是主键。hard_candy 表将 candy_num 列作为外键引 用。
以下的 CREATE TABLE 语句将创建 hard_candy 表,其外键上具有级联删除选项:

由于为子表指定了 ON DELETE CASCADE ,因此当从 all_candy 表中删除某行时,hard_candy 表中的相应行也将被删除。
有关从具有级联删除的表中删除行时的语法限制和锁定影响的信息,请
参阅级联删除表时的注意事项。




