2014-07-21 52 views
0

我从一个SQL转储导入一个数据库,我得到这个错误:MySQL的外键约束 - 不能添加或更新子行

Cannot add or update a child row: a foreign key constraint fails 
(`database_name`.`#sql-808_37`, CONSTRAINT `FK_z_log_zemail` FOREIGN KEY (`ID_evn`) 
REFERENCES `z_event` (`ID_evn`) ON DELETE SET NULL) 

Operation failed with exitcode 1" 

我知道这意味着在子表的外键不在父表z_event中,因此是错误。

问:

  1. 当时进口从该行中止SQL转储过程? (操作失败,退出代码1)

  2. 有没有任何“干净”的方式绕过这个错误而不影响数据的完整性?或者其他解决方案不涉及消除约束?

  3. 为什么会发生这种情况?表之间的一些不良关系设置?就像从父表中删除某些内容时一样,子表未被更新?

  4. sql dump是否有可能被破坏?或者这个错误很常见?我要求知道我是否应该担心或不..

+0

您可以通过推迟创建外键或导入忽略约束来避免此问题。 –

+0

嗨。我这样做,它的工作。这是一个常见问题吗?还有什么我可以做的吗? – frankmookie

+0

不,这并不罕见,并且推迟创建约束通常是您所需的全部 –

回答

2

答案:

  1. 这取决于你是如何恢复数据库。如果您正在运行插入脚本,它可能会跳过该问题并继续,但如果您正在进行批量插入(使用COPY),它将完全失败。

  2. 没有办法清理旁路。

  3. 也许转储是错误的顺序。所需的表格在引用它的表格之下(或之后)。在你的情况下,你必须确保首先加载z_event。

  4. 也许它已经损坏,但在我的经验中,第三是通常的解释。

+0

我也认为第三不太可能。除非转储是在禁用约束的情况下进行的。 –

+0

+1无论如何,都是很好的答案。 –

+0

谢谢你的回复。在转储文件中,约束条件添加在底部。所以我的猜测是在删除或更新记录时出现了一些问题。但是,你有没有可能的解决方案? – frankmookie

相关问题