2011-08-11 8 views
4

テーブルの親ローを削除すると、すべての従属ロー(子ロー)を強制的に削除する方法はありますか。Oracle - 子ローを削除する

参照整合性が多すぎるテーブルがあります。私はoracleでこれを達成する簡単な方法が何であるか疑問に思っていました。

ご協力いただきありがとうございます。

答えて

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 

私は個人的に私はむしろ親から削除手順の一部として、子テーブルに対して削除を参照してくださいねdelete--カスケードのこの種のファンではないようにプログラムの流れすべてが1か所にあります。カスケードする外部キーは、開発者がコードを読んで気付かずに追跡するのは困難なアクションを追加することで、プログラムの流れを深刻に複雑にする可能性があるという点でトリガーのようなものです。

関連する問題