Oracle - 删除子行

4

当您删除表的父行时,是否有一种方法可以强制删除所有依赖行(子行)。

我有一个具有太多引用完整性的表。我想知道在oracle中实现这一点的简单方法是什么。

感谢您的支持。

1个回答

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

我个人不是这种级联删除的粉丝——我宁愿将子表中的删除作为从父表中删除过程的一部分,以便程序流程在一个地方呈现。级联外键就像触发器一样,会通过添加动作来导致程序流程复杂化,开发人员很难注意到并跟踪代码。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接