引用表中不存在的值可能會導致此問題。在其中包含數據的表中設置外鍵約束時,我多次遇到它。
此問題的解決方案是找到對不存在的行的引用並刪除它們。一旦完成,如果語法和表定義是正確的,約束應該起作用。
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`);
您可以向我們展示您運行的表格和查詢嗎? – CoderDojo
,我會非常多,我做了ER圖,但我不能說沒有信譽:( – Avacay
____________ 產品編號 – Avacay