如果您希望当 DELETE 或 MERGE 语句删除父表中的行时,子表中相应的行也被删除,则使用 ON DELETE CASCADE 选项。
此处,parent table 是定义启用外键约束的 REFERENCING 子句指定的表 ,child table 是定义启用外键约束的表。如果您不指定级联删除,则在某个表被其它表用主键外键关系引用的情况下,数据库服务器的缺省行为防止 DELETE 和 MERGE 语句删除该表中的数据。
如果您指定此选项,则当删除父表中的行时,数据库服务器还删除任何与子表的该行(外键)关联的行。ON DELETE CASCADE 选项的运行您减少执行删除操作所需的 SQL 语句的数量。
ALTER TABLE catalog DROP CONSTRAINT aa; ALTER TABLE catalog ADD CONSTRAINT (FOREIGN KEY (stock_num, manu_code) REFERENCES stock ON DELETE CASCADE CONSTRAINT ab);
如果在子表上指定了级联删除,则除了从 stock 表中删除 stock 项以外,还删除级联到与 stock_num 外键相关联的目录表。此级联删除仅当 stock_num 没有订购时有效;否则,items 表中的约束将不允许级联删除。有关更多信息,请参阅 表有级联删除时对 DELETE 的限制 。
如果表带有 DELETE 触发事件的触发器,则您不能在该表上定义级联删除引用约束。当您试图将指定 ON DELETE CASCADE 的引用约束添加到有删除触发器的表时,接收到一条错误。
TRUNCATE 语句无法从子表进行级联删除。TRUNCATE 语句的目标表不能被在另一个定义启用外键约束表引用(除非子表没有行)。
有关从具有级联删除的表中删除行时的语法限制和锁定音响的信息,请参阅级联删除表时的注意事项。