2016-12-25 73 views
0

我最近提出了一些表,以一個新的數據庫。我將這些表的外鍵指向舊數據庫中的表。MySQL的:不能添加一個外鍵

我然後創建引用的表的新版本。我第一次嘗試到修改的FK,使他們將指向新的引用。這沒有用,所以我放棄了所有舊的FK並試圖創造新的FK。第一階段順利完成。第二階段雖然失敗,但每張桌子都是這樣,也是這樣!的反應總是想:

ERROR 1452: Cannot add or update a child row: a foreign key constraint fails (`ml`.`#sql-d04_2`, CONSTRAINT `FK_excoeff_secID` FOREIGN KEY (`SecurityID`) REFERENCES `securities` (`SecurityID`))  

故障出現立即似乎並沒有涉及到實際的數據。如您所見,在錯誤消息中,表名通常所在的位置現在被填充了一個奇怪的字符串。並且不管引用表是什麼,該錯誤包含相同的字符串。

所有這一切在MySQL工作臺的「ALTER TABLE」部分happend,也可作爲一個普通的SQL查詢。

我有什麼錯???

+0

http://stackoverflow.com/questions/21659691/error-1452-cannot-add-or-update-a-child-row-a-foreign-key-constraint-fails –

+0

的可能的複製沒有, 不是這樣。關鍵的區別是1)表名的奇怪字符串。它必須意味着什麼,2)它是所有表格的_same_「表名」,我嘗試向它們添加FK。 3)所有的表數據_was_由同等的外鍵管理。數據中沒有衝突! – MeirG

回答

0

彼得Brawly先生,in the MySQL forums是非常有益的。他的回答是:

  1. 的「怪繩」只是一個臨時表中所使用的名稱內部
  2. 的失敗原因可能是舊的方式一個 - 違反數據的參照完整性。他是對的!
  3. 和SQL查詢來檢測的罪魁禍首(s)爲:

    SELECT DISTINCT c.ID FROM child_table爲C LEFT JOIN parent_table爲P USING(ID) WHERE p.ID IS NULL;