2011-03-13 198 views
2

當我在我的其他MySQL數據庫上使用我的Zend項目時,它像一個魅力一樣工作。但是,當我導出數據庫,並把它放在我的其他服務器上的同一個項目提供了以下錯誤:Mysql約束衝突

Message: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`devel`.`Service`, CONSTRAINT `Service_ibfk_1` FOREIGN KEY (`customerId`) REFERENCES `customer` (`customerId`)) 

有誰知道這是怎麼回事?

回答

0

要插入/更新上表中的價值,customerId值從主customer

缺少做一個選擇,看看是否值存在。其中100是佔位符值。

select customerId from customer where customerId = 100; 

您需要先在客戶表中創建customerId值。

0

似乎有人忘記禁用foreign key checks在出口(mysqldump通常會包括他們默認情況下)。

如果服務器上的數據正常,則可以在導入之前使用SET foreign_key_checks = 0;臨時禁用檢查。

從MySQL命令行正常使用應該是:

SET foreign_key_checks = 0; 
SOURCE /path/to/sql/dump.sql; 
SET foreign_key_checks = 1; 
0

你跟表定義完全導出數據庫?也許外鍵定義不存在於其他數據庫中。或者也許數據類型太小。如果將customerId定義爲tinyint,並且該值大於255,則該值再次以1開頭。如果子行查找該數字,如果由於此截斷而無法找到它。

嘗試查找腳本中哪一行出現錯誤,並嘗試查找它是否嘗試插入的customerId值已存在。

最重要的是,首先插入父表的數據,然後插入外鍵子表的數據!將數據導出到SQL腳本時,某些工具會將此命令弄錯。