2014-06-18 155 views
2

我剛開始學習SQL,所以我有點困惑。外鍵表更新

如果我有了一個主鍵表A:與外鍵的CustomerID客戶ID &表B

我用CASCADE添加的外鍵約束,這樣的外鍵進行更新還是當主鍵是自動刪除刪除或更新。

然而,它僅適用於刪除。當我在主字段表中添加新記錄時,該記錄不會顯示在外鍵表中,爲什麼?

+0

http://stackoverflow.com/questions/1481476/when-to-use-on-update-cascade –

+1

當我在主鍵表中添加一條新記錄時,我希望它自動出現在外鍵表中,但這不是更新所做的。更新級聯僅更新已經存在的值。 – Lenonor

+0

'當我在主字段表中添加新記錄? http://docs.cascading.org/cascading/1.2/javadoc/cascading/operation/Insert.html –

回答

1

當在父表中更新或刪除該行時,在引用表 中更新或刪除相應的行。如果時間戳列是 外鍵或引用鍵的一部分,則不能指定CASCADE 。 ON DELETE CASCADE不能是 爲具有INSTEAD OF DELETE觸發器的表指定。 ON UPDATE 對於具有INSTEAD OF UPDATE 觸發器的表,不能指定CASCADE。

如提及MSDN。他們提到主鍵表的唯一更新和刪除操作將影響到外鍵表的列。如果有任何對主鍵的插入,它不會影響外鍵。由於主鍵和外鍵關係的主要目標

「每個記錄在外鍵表中都可用,它應該包含相應的記錄應該存在於主鍵表中,反之亦然」。

如果插入到外鍵表中的任何記錄,這將引發外資參照完整性錯誤。它不會允許您在外表中插入一條記錄,除非您將在主鍵表中對應記錄。

信息採取看看在MSDN以下鏈接

http://msdn.microsoft.com/en-us/library/ms179610.aspx

注:

如果要實現這個功能

,那麼你必須寫存儲過程或觸發器的邏輯。

+0

謝謝,現在很清楚 – Lenonor

0

不,不是自動添加在你的外鍵表中,這是沒有意義的,例如,如果你有兩個表,「城市」和「人」,城市裏的人,所以必須有一個FK指代人,如果你在城市添加記錄,例如紐約,數據庫如何知道誰需要插入People表?有多少人? ,這個人的屬性是什麼?例如人名?

所以數據庫不能這樣做自動的,你必須做手工!