2011-03-13 154 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脚本时,某些工具会将此命令弄错。