级联删除的示例

假设您有应用了引用完整性规则的两个表,父表 accounts,以及子表 sub_accounts。下列 CREATE TABLE 语句定义引用约束:
CREATE TABLE accounts (
          acc_num SERIAL primary key,
          acc_type INT,
          acc_descr CHAR(20));
          
          CREATE TABLE sub_accounts (
          sub_acc INTEGER primary key,
          ref_num INTEGER REFERENCES accounts (acc_num)
          ON DELETE CASCADE,
          sub_descr CHAR(20));

accounts 表的主键,acc_num 列,使用 SERIAL 数据类型,sub_accounts 表的外键,ref_num 列,使用 INTEGER 数据类型。允许组合主键上的 SERIAL 与外键上的 INTEGER 数据类型。仅在此条件下,您可混合并匹配数据类型。SERIAL 数据类型是 INTEGER,且数据库自动地为该列生成值。所有其他主键与外键组合都必须显式地相匹配。例如,定义为 CHAR 的主键必须与定义为 CHAR 的外键相匹配。

sub_accounts 表的外键的定义,ref_num 列,包括 ON DELETE CASCADE 选项。此选项指定在父表 accounts 中任何行的删除都将自动地导致删除子表 sub_accounts 的对应行。

要从将级联删除 sub_accounts 表的 accounts 表删除一行,您必须打开日志记录。打开日志记录之后,您可从两个表都删除账户编号 2,如下例所示:
DELETE FROM accounts WHERE acc_num = 2;