Mysql约束违规

时间:2011-03-13 19:01:00

标签: php mysql foreign-keys

当我在我的其他MySQL数据库上使用我的Zend项目时,它就像一个魅力。但是当我导出数据库并将其放在我的其他服务器上时,同一个项目会出现以下错误:

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`)) 

有人知道这是关于什么的吗?

3 个答案:

答案 0 :(得分:0)

您要在表格中插入/更新的值,主customerId表中缺少customer的值

执行选择以查看值是否存在。其中100是占位符值。

select customerId from customer where customerId = 100;

您需要先在customer表中创建customerId值。

答案 1 :(得分:0)

似乎有人忘了在导出中禁用foreign key checksmysqldump通常会默认包含它们。)

如果服务器上的数据正常,您可以在导入前使用SET foreign_key_checks = 0;暂时禁用该检查。

MySQL命令行的正常使用将是:

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

答案 2 :(得分:0)

您是否使用表定义完全导出数据库?也许外键定义不存在于其他数据库中。或者数据类型太小。如果您将customerId定义为tinyint并且值大于255,则该值再次开始为1。如果子行查找该号码,如果由于此截断而无法找到它。

尝试查找脚本中哪一行发生错误,并尝试查找是否存在它尝试插入的customerId值。

最重要的是首先插入父表的数据,然后插入外键子表的数据!将数据导出到sql脚本时,某些工具会错误地输入此命令。