Oracle - 删除子行

时间:2011-08-11 21:23:55

标签: oracle oracle10g oracle11g

当您删除表的父行时,是否有办法强制删除所有相关行(子行)。

我的表有太多的参照完整性。我想知道在oracle中实现这个目标的简单方法是什么。

感谢您的支持。

1 个答案:

答案 0 :(得分:9)

您可以声明级联删除的外键约束,以便在删除父行时自动删除子行。

SQL> create table parent (
  2    parent_key number primary key
  3  );

Table created.

SQL> create table child (
  2    child_key number primary key,
  3    parent_key number,
  4    constraint fk_child_parent foreign key( parent_key )
  5      references parent( parent_key )
  6      on delete cascade
  7  );

Table created.

SQL> insert into parent values( 1 );

1 row created.

SQL> insert into child values( 10, 1 );

1 row created.

SQL> commit;

Commit complete.

SQL> delete from parent where parent_key = 1;

1 row deleted.

SQL> select * from child;

no rows selected

我个人不是这种级联删除的粉丝 - 我宁愿看到对子表的删除作为从父进程中删除的过程的一部分,以便程序的流程全部在一个地点。级联外键就像触发器,因为它们可以通过添加对于通过代码进行通知和跟踪而难以阅读的操作来严重地使程序流程复杂化。