2017-05-20 45 views
0

我是這個努力了一夜,但還是無法完成它,這裏是自動生成的內容的查詢:添加外鍵失敗的phpMyAdmin的

ALTER TABLE `avatar` ADD FOREIGN KEY ( `characterID`) REFERENCES `201701_481_g02`.`character_table` (

`characterID` 
) ON DELETE RESTRICT ON UPDATE RESTRICT ; 

錯誤消息:

1452 - 不能添加或更新子行,外鍵約束失敗(201701_481_g02#sql-6595d_522e8,約束#sql-6595d_522e8_ibfk_1外鍵(characterID)參考文獻character_tablecharacterID))

回答

1

這種情況的最可能的解釋行爲是avatar表中的行,其值characterID未出現在character_table中。

我們可以使用帶有反連接模式的查詢來標識這些值。例如

SELECT a.characterID 
    FROM `avatar` a 
    LEFT 
    JOIN `201701_481_g02`.`character_table` c 
     ON c.characterID = a.characterID 
    WHERE c.characterID IS NULL 

有了確定的,我們可以創建在characterID列相應的值在引用錶行的值。或者我們可以刪除或修改avatar中的行。


我認爲當沒有引用列作爲主要列的索引時引發了不同的錯誤。並且如果兩列的數據類型不完全匹配。

0

對於埃羅r代碼1452根據Mysql文檔,

外鍵關係涉及一個保存中央數據值的父表和一個具有相同值的子表指向其父。 FOREIGN KEY子句在子表中指定。

如果父表中沒有匹配的候選鍵值,它將拒絕嘗試在子表中創建外鍵值的任何INSERT或UPDATE操作。

所以,你的情況外鍵或CharacterId子表上(化身)中沒有匹配的候選鍵在父表中的值(character_table

相關問題