【问题标题】:Mysql cannot add or update child row, Foreign key related failureMysql无法添加或更新子行,外键相关失败
【发布时间】:2012-07-26 02:17:55
【问题描述】:

错误:无法添加或更新子行:外键约束失败

以下是产生错误的代码:

ALTER TABLE 'catalog_eav_attribute' 
  ADD CONSTRAINT 'FK_CATALOG_EAV_ATTRIBUTE_ID' 
  FOREIGN KEY ('attribute_id') REFERENCES 'eav_attribute' ('attribute_id)' 
  ON DELETE CASCADE ON UPDATE CASCADE;

我上传了 SQL 的结构,它没有问题,但是当我插入数据时,我得到了上述相关错误。我在某处读过,我预测它是因为糟糕的数据。错误的其他可能性是什么?任何建议或解决方案都会很棒。

【问题讨论】:

  • 这不是有效的 MySQL。标识符用反引号引用,而不是单引号。这甚至不会运行。
  • 你在插入什么? attribute_id 字段是否引用了 eav_attribute 表中的某些内容?
  • @Michael,我在 MySQL 中成功使用了单引号和反引号。
  • @SableFoste 在 ANSI_QUOTES 模式下,您可以对标识符进行双引号,但不能对它们进行单引号。单引号用于字符串文字。 dev.mysql.com/doc/refman/5.0/en/identifiers.html
  • @Michael:哇,很高兴知道,但有点吓人......我可能有很多代码要回去更新,以防万一......谢谢你的信息。

标签: mysql database database-design foreign-key-relationship


【解决方案1】:

"对于 InnoDB 以外的存储引擎,MySQL Server 解析 CREATE TABLE 语句中的 FOREIGN KEY 语法,但不使用或存储它。"

发件人:http://dev.mysql.com/doc/refman/5.5/en/ansi-diff-foreign-keys.html

我不确定,但如果您的表是 MyISAM 而不是 InnoDB,您的语法可能不起作用。

【讨论】:

    【解决方案2】:

    错误消息表示您尝试放入 attribute_id 列的任何数字在 eav_attribute.attribute_id 列中尚不存在。

    你能插入一个 确实 已经存在于 eav_attribute.attribute_id 中的值吗? (你可能可以。)

    您是否可以通过尝试在 eav_attribute.attribute_id 中插入 的值来引发相同的错误?

    调和差异,您就完成了。您需要确定 eav_attribute.attribute_id 中不存在哪些属性 ID,并修复它。

    【讨论】:

      猜你喜欢
      • 2015-07-26
      • 2012-10-09
      • 2015-06-06
      • 2016-08-09
      • 2011-03-31
      • 2013-08-10
      • 1970-01-01
      • 2016-05-23
      • 2012-03-14
      相关资源
      最近更新 更多