2011-08-11 61 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--我寧願看到刪除兌子表爲從父刪除程序的一部分,使得程序的流程都在一個地方。級聯外鍵就像觸發器一樣,它們可以通過添加一些操作來使程序流程嚴重複雜化,這些操作對於開發人員通過代碼進行通讀和跟蹤來說是很難的。