【问题标题】:key constraint fails - what does it mean?键约束失败 - 这是什么意思?
【发布时间】:2012-03-01 15:20:01
【问题描述】:

将数据保存到我的数据库时出现此错误:

SQLSTATE[23000]:违反完整性约束:1452 无法添加或更新子行: 外键约束失败 (mydb.samplelist_item, CONSTRAINT FK_SAMPLELIST_ITEM_SAMPLELIST 外键 (samplelist_id) 引用 samplelist (samplelist_id) ON DELETE CASCADE ON UPDATE CASCADE)

不确定是什么问题。

【问题讨论】:

  • 我可以知道你的mysql引擎吗?是innoDB还是MyISAM
  • 不确定,我将表 samplelist 和 samplelist_item 设置为 innodb。我的数据库中的一些表是 myisam,我很确定。
  • 你检查过innoDb是否支持外键
  • @SamArulRaj:MyISAM 永远不会抱怨外键,因为它不支持外键。 InnoDB 是唯一支持 FK 约束的 (AFAIK) 引擎
  • @a_horse_with_no_name 是的,你是对的dev.mysql.com/doc/refman/5.5/en/… 问题可能是因为这个......我怀疑

标签: mysql


【解决方案1】:

听起来您正在尝试使用外键向表中添加一行,但您为外键列指定的值在外表中没有匹配项。

【讨论】:

  • 那么在哪个表 iyo 中缺少什么?
  • 看起来您尝试在samplelist_item 中为samplelist_id 设置的值在samplelist 中没有匹配的行。
  • 是的,samplelist 中的一行与 samplelist_id 的值相同,因为您尝试在 samplelist_item 的新(或更新)行中设置。
  • 我检查了我的数据库,只有 samlpelist 有一行,但没有 samplelist_item。每一行都必须有一个领带,这不是真的,这就是你说的问题?
  • @EOB 是的,您在 samplelist_item 表中添加的每个 samplelist_id 必须已经存在于 samplelist 表的 samplelist_id 列中。
【解决方案2】:

Ref这将是手动的问题

如果父表中没有匹配的候选键值,InnoDB 拒绝任何尝试在子表中创建外键值的 INSERT 或 UPDATE 操作。当 UPDATE 或 DELETE 操作影响父表中具有匹配行的子表中的键值时,结果取决于使用 FOREIGN KEY 子句的 ON UPDATE 和 ON DELETE 子句指定的引用操作。 InnoDB 支持关于要采取的操作的五个选项。如果未指定 ON DELETE 或 ON UPDATE,则默认操作为 RESTRICT。

【讨论】:

  • 是的,因为可能是您的子表引用了您的父表,因此在这种情况下会出现错误。
猜你喜欢
  • 1970-01-01
  • 2011-11-12
  • 1970-01-01
  • 1970-01-01
  • 2015-06-10
  • 1970-01-01
  • 1970-01-01
  • 2018-09-10
相关资源
最近更新 更多