2012-10-18 42 views
0

餘米試圖將一個外鍵從table1添加到表table2。但我得到了這樣的錯誤......這是什麼問題...幫助表1的無法添加外鍵

Error 

SQL query: 

ALTER TABLE `table2` ADD FOREIGN KEY (`bus_id`) REFERENCES `db1`.`table1` (
`bus_id` 
) ON DELETE CASCADE ON UPDATE CASCADE ; 

MySQL said: Documentation 
#1452 - Cannot add or update a child row: a foreign key constraint fails (`db1`.`#sql-664_e2`, CONSTRAINT `#sql-664_e2_ibfk_1` FOREIGN KEY (`bus_id`) REFERENCES `table1` (`bus_id`) ON DELETE CASCADE ON UPDATE CASCADE) 

結構

enter image description here

表2的結構

enter image description here

+0

我看不到結構,因爲我在工作,但它似乎有一個表中有一個bus_id不在表2中的條目,因爲你的外鍵聲明,當你刪除一個table2條目時,它應該從表1刪除...它給你一個錯誤...... –

+0

@QuadroQ你wrong.table1被引用表,所以它可以在table2.But表2找不到值不能有其不在表1 bus_id值。 – rkosegi

+0

是啊......也許我把它全部倒過來了...... :)謝謝 –

回答

1

你的表中有一些數據。檢查存儲在table2中的所有值。 bus_id是正確的;所有這些值必須在table1之內。 bus_id

運行此查詢到table2查看錯誤bus_id值:

SELECT t2.bus_id AS inconsistent_bus_id FROM table2 t2 
LEFT JOIN table1 t1 
    ON t1.bus_id = t2.bus_id 
WHERE t1.bus_id IS NULL 

table2刪除此記錄,或添加此bus_idtable1。然後嘗試再次創建外鍵。

+0

謝謝@devart ....你是對的..謝謝 –

1

要獲得以下逗號更多信息運行nd:

SHOW ENGINE INNODB STATUS; 

我期望有數據不匹配,例如。 table2包含列表bus_id中找不到的值。

試試這個:

SELECT DISTINCT bus_id FROM table2 WHERE 
    bus_id NOT IN (SELECT bus_id FROM table1) 

還要確保兩個表使用的InnoDB作爲存儲引擎。

+0

感謝您的支持......你是對的...... –

1

我在您的ALTER聲明中看不到任何錯誤。主要的原因是,也許目前已經有上table2bus_id不在table1存在的記錄。所以你可以做的最好的解決方案是清空第一個table2並再次運行alter語句。

+0

Thnks for your支持......正確的答案 –