2014-02-10 31 views
0

我剛開始學習數據庫。我的教授提到了「參照完整性」這個詞,我試圖理解它。瞭解數據庫中的參照完整性

這是我的理解。如果我有

表管理:經理標識,MANAGER_NAME 表僱員:EMPLOYEE_ID,MANAGER_ID,Employee_name

經理標識爲 「管理表」 中的主鍵&外鍵爲 「Employee表」

如果我從Manager中刪除/更新任何Manager_id,然後所有具有該管理員ID的條目將被刪除/更新。即級聯更新或刪除。

但是如果我嘗試刪除或更新「員工表」中的manager_id,該怎麼辦?它是否會相應地從Manager表中刪除條目?

回答

2

如果我刪除/從經理更新任何MANAGER_ID則具有管理員ID將被刪除/更新的所有條目 。這是級聯 更新或刪除。

只有在您爲外鍵定義了UPDATE/DELETE規則時纔會出現這種情況。默認情況下,級聯UPDATES/DELETES被禁用,因爲它可能會導致您的數據發生意外更改。

但是,如果我嘗試刪除或更新「員工 表」中的manager_id,該怎麼辦?它是否會相應地刪除管理者 表中的條目?

它只會刪除單個員工,因爲相關經理也可能被其他員工引用。

+0

因此,基本上級聯刪除例如:查詢將是..刪除*從經理,其中manager_id =「123」。我對嗎? – kiki

+0

是的,確切地說。這表明爲什麼級聯默認關閉,因爲您甚至可以在不知道它的情況下輕鬆刪除有價值的數據。 –

1

'級聯'部分從主鍵到外鍵,但不是相反。

當您刪除Manager1時,假設Employee1將Manager1作爲管理員是沒有意義的,因爲他們不再被定義。

但是,當您將Employee1的經理從Manager1更改爲Manager2時 - 假設兩個經理仍然存在,那麼仍然無誤。

+0

所以基本上級聯刪除例如:查詢將是..刪除*從管理器where manager_id =「123」。我對嗎? – kiki

+0

yes - 那麼通常可以選擇下一步做什麼 - 級聯或不級聯,如果級聯 - 將FK值設置爲:NULL或一些默認值 – Randy