键约束失败 - 这是啥意思?
Posted
技术标签:
【中文标题】键约束失败 - 这是啥意思?【英文标题】:key constraint fails - what does it mean?键约束失败 - 这是什么意思? 【发布时间】:2012-03-01 15:20:01 【问题描述】:将数据保存到我的数据库时出现此错误:
SQLSTATE[23000]:违反完整性约束:1452 无法添加或更新子行: 外键约束失败 (
mydb
.samplelist_item
, CONSTRAINTFK_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/… 问题可能是因为这个......我怀疑 【参考方案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。
【讨论】:
是的,因为可能是您的子表引用了您的父表,因此在这种情况下会出现错误。以上是关于键约束失败 - 这是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章
这是啥意思? “加载资源失败:服务器响应状态为 405(不允许方法)”