【问题标题】:Mysql constraint violationMysql 约束违反
【发布时间】:2011-03-13 19:01:00
【问题描述】:
当我在我的另一个 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`))
有人知道这是怎么回事吗?
【问题讨论】:
标签:
php
mysql
foreign-keys
【解决方案1】:
您要在表中插入/更新的值,主表customer 中缺少customerId 的值
执行选择以查看该值是否存在。其中 100 是占位符值。
select customerId from customer where customerId = 100;
您需要先在客户表中创建customerId 值。
【解决方案2】:
好像有人忘记在导出中禁用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;
【解决方案3】:
您是否完全使用表定义导出数据库?也许其他数据库中不存在外键定义。或者可能数据类型太小。如果您将 customerId 定义为 tinyint 并且值大于 255,则该值再次从 1 开始。如果子行查找该数字,如果由于此截断而找不到它。
尝试查找错误发生在脚本中的哪一行,并尝试查找它尝试插入的 customerId 值是否已经存在。
最重要的是先插入父表的数据,再插入外键的子表的数据!某些工具在将数据导出到 sql 脚本时会出现此顺序错误。