2011-03-13 83 views
0

我在列TEMP1.aa(temp1中的主鍵)中插入數據,但它不會導入到TEMP2.cc列(TEMP2中的外鍵)中。爲什麼外鍵不會更新?

爲什麼?

我想如果在主鍵中插入數據它會自動插入到外鍵!如果這是真的,如果我們插入一個主鍵,外鍵必須更新?

+3

我不認爲你瞭解外鍵都讀了。 – BoltClock 2011-03-13 20:10:50

+0

除非你有某種類型的觸發器設置,只是因爲某些東西是外鍵並不意味着它會自動更新。 – 2011-03-13 20:12:09

回答

4

外鍵不會更新子引用,它只能確保存儲在列中的值已經存在於父表中。

但是,MySQL通過將TEMP1表中的外鍵約束添加ON UPDATE CASCADE來支持級聯更新。否則,您需要考慮使用觸發器來制定更詳細的規則/要求。

參考:

+0

與問題相切。 UPDATE CASCADE與問題 – RichardTheKiwi 2011-03-13 20:17:18

+0

@Richard aka cyberkiwi中的INSERT操作無關:如果插入(意思是添加新的父表數據),則不會有子引用進行更正。檢查OPs問題的編輯歷史,你會發現英語不是他們的母語。 – 2011-03-13 20:22:57

0

不,外鍵不喜歡這樣的工作。

外鍵用於通過鍵將兩個錶鏈接在一起。在一張桌子上,您有PRIMARY KEY以及與該實體有關的所有屬性。

在其他表,你有告訴數據庫FOREIGN KEY「嘿,你的用戶,你只能在此插入一個值,如果它也存在在我的參考表一PRIMARY KEY

如果您想要在您的外部表中連續排列INSERT,您仍然可以根據自己的意願選擇。


如果需要外部表始終有一行引用其在主表的通訊員,有機會,你可能該錶轉換爲附加列,因爲它們的屬性相同的實體。 這個也有例外,但詳細說明會增加您的困惑。

1

考慮這些表

Fruits 
ID Name 
1 Apple 
2 Orange 
3 Grapes 

Sales 
ID Fruit Amount 
1 1  2.45 
2 3  1.23 
3 1  2.23 
4 2  6.22 

Sales(Fruit) to Fruits(ID)外鍵確保了每個銷售水果的值必須從水果的ID相符。不,你的問題

我在列aa(主鍵在temp1中)插入數據,但它不會導入到TMP2.cc列(temp2中的外鍵)。

因此,我們在水果(ID:4,名稱:梨)中插入記錄。你想把它導入銷售?怎麼樣?

關於外鍵的一些基礎知識