2013-10-08 28 views
0

我越來越而分配外鍵現有的表列如下錯誤:ERROR 1452(23000):不能添加或更新子行,外鍵約束失敗對於現有的表

ERROR 1452(23000) :不能添加或更新子行,外鍵約束失敗

下面是我的查詢(c_x_parsing#sql-787_1,約束#sql-787_1_ibfk_1外鍵(nct_id)參考文獻cdbnct_id)。):

ALTER TABLE c_int ADD FOREIGN KEY (n_id) REFERENCES cdb (n_id); 

雖然我的父表是cdb cdb,子表是c_int。

請給我建議解決方案,因爲我已經與下面的命令嘗試:

ALTER TABLE cdb ENGINE=InnoDB; 
ALTER TABLE c_int ENGINE=InnoDB; 

回答

4

的問題是不是命令,而是數據。子表中有一個不存在於父表中的值。使用這樣的事情

揣摩其中的數據導致了問題:

SELECT n_id FROM c_int WHERE n_id NOT IN (SELECT n_id FROM cdb) 
+0

你說得對。父表中缺少一些id,它們出現在子表中。有沒有什麼辦法可以通過忽略子表中存在的id而不是父表中的id來做同樣的事情?或者我需要重新填充表嗎? – user2818537

+0

你的建議意味着你的外鍵無效。你可以考慮的是爲'未知'或其他不重要的條目創建一個unqiue ID,然後更新子表以確保所有其他條目都指向新的ID。 – SchmitzIT

+0

我的確有同樣的。作爲我的魅力。 –

0

請檢查兩個領域的整理和字符集。 cdb(n_id)和父表中的列

相關問題