2017-10-15 106 views
0

DDL用於創建數據庫是這樣SQL參考integerity遞歸

create table manager 
    (employee_name varchar(20) not null, 
    manager_name varchar(20) not null, 
    primary key (employee_name), 
    foreign key (manager_name) references manager on delete cascade); 

如果經理關係的情況下是這樣的

employee_name | manager_name 
----------------------------- 
A    | B 
----------------------------- 
B    | C 
----------------------------- 
C    | B 
----------------------------- 
D    | B 

在這種情況下,如果我刪除元組(A,B),在此關係其他元組不會被刪除。我是這樣想的。

但書的答案是所有的元組都被刪除。我不明白爲什麼所有的元組都被刪除。

+0

將employee_name添加到外鍵約束:外鍵(manager_name)在刪除級聯時引用manager(employee_name) –

+0

DDL在書中。問題是如果一個關係中的元組被刪除,會發生什麼 – Damotorie

+0

您的代碼無效。對於外鍵,您需要指定它所引用的列,它目前只指定它引用的表。如果它引用主鍵,那麼你是對的,它不會刪除每一行。但是你應該避免檢查你所要做的是本書告訴你要做什麼。也許有另一個外鍵,一個不同的外鍵,不同的樣本數據,或者你應該刪除一個不同於((A,B))的元組來獲得這個效果。 – Solarflare

回答

0

您有作爲員工的A,B,C和D。其中您已定義B和C爲經理。並且您已選擇使用ON DELETE CASCADE,這意味着如果您在表Manager中刪除一個父元組,它將自動影響子元素(表Employees)。

基本上,如果你決定要刪除既是管理者(B和C) - B的A,C和d爲員工和C有B中員工)。

在這種情況下,所有元組可能會在創建表時定義的級聯中刪除。