2012-03-01 55 views
0

我收到此错误,将数据保存到我的数据库时:关键约束失败 - 这是什么意思?

SQLSTATE [23000]:完整性约束违规:1452不能添加或更新子行。 一个外键约束失败(mydbsamplelist_item,约束FK_SAMPLELIST_ITEM_SAMPLELIST 外键(samplelist_id)参考文献samplelistsamplelist_id)ON DELETE CASCADE ON UPDATE CASCADE)

不知道是什么问题。

+0

我可以知道你的mysql引擎吗?是innoDB或MyISAM – 2012-03-01 15:22:30

+0

不确定,我将表samplelist和samplelist_item设置为innodb。我的数据库中的一些表格是myisam,我很确定。 – EOB 2012-03-01 15:23:27

+0

你有没有检查innoDb是否支持foreignkey – 2012-03-01 15:25:53

回答

2

听起来好像你试图用一个外键向表中添加一行,但是你为外键列指定的值在外表中没有匹配。

+0

那么什么是缺少哪个表iyo? – EOB 2012-03-01 15:23:46

+0

它看起来像你试图为'samplelist_item'中的'samplelist_id'设置的值在'samplelist'中没有匹配的行。 – VeeArr 2012-03-01 15:24:52

+0

那就是样本列表中的samplelist_id,对吗? – EOB 2012-03-01 15:26:25

1

Ref这将是从问题手册

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

+0

但我说它有更新/删除... – EOB 2012-03-01 15:46:11

+0

是的,因为,可能是你的子表有对你的父母的参考,所以它会这样的错误,因为你得到这种情况。 – 2012-03-01 15:52:00