2014-05-02 157 views
0

#1452 - 不能添加或更新子行:外鍵約束失敗(robotspecifications,約束specifications_ibfk_1外鍵(Product_code)參考文獻product shipmentProduct_code ))不能添加或更新子行,外鍵約束失敗

進出口新的這一點,我真的不知道即時得到什麼在這裏!? :OO

我幾乎是100%肯定我正確定義我的主鍵和外鍵在我的其他表..

誰能告訴我的母語是英語的,做錯了什麼即時通訊?

+1

您可以向我們展示您運行的表格和查詢嗎? – CoderDojo

+0

,我會非常多,我做了ER圖,但我不能說沒有信譽:( – Avacay

+0

____________ 產品編號 – Avacay

回答

0

引用表中不存在的值可能會導致此問題。在其中包含數據的表中設置外鍵約束時,我多次遇到它。

此問題的解決方案是找到對不存在的行的引用並刪除它們。一旦完成,如果語法和表定義是正確的,約束應該起作用。

Table : Country 
cid | Name | Comment 
--------------------------------- 
1 | Japan | xyz 
2 | USA  | pqr 
3 | India | abc 
4 | Germany | lmn 
30 | France | pqr 

Table : Language 
lid | country_id | lang_name 
--------------------------------- 
101 |  1  | Japanese 
901 |  2  | Engligh 
291 |  3  | Hindi 
678 |  4  | German 
283 |  30  | French 
827 |  9  | Russian 

正如我們可以看到,語言reff#827是指國家reff#9,但我們的國家表沒有這個值。沒有[9 |俄羅斯| ghk]那裏。

試圖創建一個外鍵約束將失敗,並出現以下錯誤

ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test_db`.`#sql-4ae_1f19e`, CONSTRAINT `country_ID_fk` FOREIGN KEY (`country_id`) REFERENCES `country` (`cid`)) 

解決方案:我們需要找到所有不存在引用,並手動刪除它們。小桌子很簡單。隨着它與大型數據表使用下面的查詢查找所有不存在的引用:

select country_id,(select count(*) from country where country_id = cid) from language WHERE country_id*(select count(*) from country where country_id = cid) = 0 ; 

這將列出所有不存在的引用。一旦刪除了參考文件,就可以用命令創建約束條件:

ALTER TABLE language ADD CONSTRAINT country_if_fk FOREIGN KEY (country_id) REFERENCES country(`cid`); 
相關問題