Cannot add or update a child row: a foreign key constraint fails (`analysis_da

lcyq0 2014-09-17 05:19:23
sql = "insert into tb_capacity_weight_source values(null,?,?,?)";
PreparedStatement preStmt = conn.prepareStatement(sql);
preStmt.setInt(1, i);
preStmt.setDouble(2,adjustWeight[count]);
preStmt.setInt(3, result_id);
preStmt.executeUpdate();
报错
Cannot add or update a child row: a foreign key constraint fails (`analysis_database/tb_capacity_weight_source`, CONSTRAINT `FK_REFERENCE_10` FOREIGN KEY (`INDEX_ID`) REFERENCES `tb_capacity_result_index` (`INDEX_ID`)

但是代码中要插入的记录,检查过对应的外键INDEX_ID已经存在的。

之前写的代码,插入记录中没有INDEX_ID这一项的话是可以顺利插入表中的,增加这个外键之后出现了问题。
不知道是不是与`tb_capacity_result_index` (`INDEX_ID`)多次用作外键有关? 不懂,求解决。


-- ----------------------------
-- Table structure for `tb_capacity_result`
-- ----------------------------
DROP TABLE IF EXISTS `tb_capacity_result`;
CREATE TABLE `tb_capacity_result` (
`RESULT_ID` int(11) NOT NULL auto_increment,
`CAPACITY_ID` int(11) default NULL,
`INDEX_ID` int(11) default NULL,
`RESULT` double default NULL,
PRIMARY KEY (`RESULT_ID`),
KEY `FK_REFERENCE_7` (`CAPACITY_ID`),
KEY `FK_REFERENCE_8` (`INDEX_ID`),
CONSTRAINT `FK_REFERENCE_7` FOREIGN KEY (`CAPACITY_ID`) REFERENCES `tb_capacity` (`CAPACITY_ID`),
CONSTRAINT `FK_REFERENCE_8` FOREIGN KEY (`INDEX_ID`) REFERENCES `tb_capacity_result_index` (`INDEX_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


-- ----------------------------
-- Table structure for `tb_capacity_source`
-- ----------------------------
DROP TABLE IF EXISTS `tb_capacity_source`;
CREATE TABLE `tb_capacity_source` (
`CAPACITY_SOURCE_ID` int(11) NOT NULL auto_increment,
`CAPACITY_SOURCE` double default NULL,
`CAPACITY_ID` int(11) default NULL,
`INDEX_ID` int(11) default NULL,
PRIMARY KEY (`CAPACITY_SOURCE_ID`),
KEY `FK_REFERENCE_11` (`INDEX_ID`),
KEY `FK_REFERENCE_2` (`CAPACITY_ID`),
CONSTRAINT `FK_REFERENCE_11` FOREIGN KEY (`INDEX_ID`) REFERENCES `tb_capacity_result_index` (`INDEX_ID`),
CONSTRAINT `FK_REFERENCE_2` FOREIGN KEY (`CAPACITY_ID`) REFERENCES `tb_capacity` (`CAPACITY_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=120 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of tb_capacity_source
-- ----------------------------

-- ----------------------------
-- Table structure for `tb_capacity_weight_source`
-- ----------------------------
DROP TABLE IF EXISTS `tb_capacity_weight_source`;
CREATE TABLE `tb_capacity_weight_source` (
`CAPACITY_WEIGHT_SOURCE_ID` int(11) NOT NULL auto_increment,
`CAPACITY_ID` int(11) default NULL,
`INDEX_ID` int(11) default NULL,
`CAPACITY_WEIGHT_SOURCE` double default NULL,
PRIMARY KEY (`CAPACITY_WEIGHT_SOURCE_ID`),
KEY `FK_REFERENCE_1` (`CAPACITY_ID`),
KEY `FK_REFERENCE_10` (`INDEX_ID`),
CONSTRAINT `FK_REFERENCE_1` FOREIGN KEY (`CAPACITY_ID`) REFERENCES `tb_capacity` (`CAPACITY_ID`),
CONSTRAINT `FK_REFERENCE_10` FOREIGN KEY (`INDEX_ID`) REFERENCES `tb_capacity_result_index` (`INDEX_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=261 DEFAULT CHARSET=utf8;
...全文
14111 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
F-PHantam 2016-05-17
  • 打赏
  • 举报
回复
我也遇到同样的问题 解决的方法是java.sql.Statement.getGeneratedKeys(),需要西东捕获自动生成的主键,楼主可以往这一方面想想看
he729he 2015-01-24
  • 打赏
  • 举报
回复
我也碰到了同样的问题,哎,我重新创建了表,去掉了外键,只添加了数据,能供测试使用了
沟沟里的农民 2014-09-22
  • 打赏
  • 举报
回复
能否把tb_capacity_result_index表的定义贴出来,提示Cannot add or update a child row,一般是表之间互相引用外键造成“死锁”。你这里可能出现了类似下面的样子: 先建两张表:user和card,为了简单,都只有一个字段:id,让他们彼此成为对方的外键: mysql> create table user(id int primary key) character set utf8; mysql> create table card(id int primary key, constraint fk_user_id foreign key (id) references user(id))character set utf8; mysql> alter table user add constraint fk_card_id foreign key(id) references card(id); 此时,任何一张表都无法插入数据,也不能删除表。 mysql> drop table user; ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails 解决方法还是要删除外键约束,先通过:show create table user;找到外键约束的名字,再把约束删除: mysql> alter table user drop foreign key fk_card_id; 此时就可以向user插入数据了,card表也就可以删除了。 这个例子比较无聊,只是列出来,希望对遇到此问题的朋友有帮助。
lcyq0 2014-09-18
  • 打赏
  • 举报
回复
引用 1 楼 ACMAIN_CHM 的回复:
`tb_capacity_result_index` (`INDEX_ID`) 表中没有对应的项。
表中已经有对应的项, 而且同样的INDEX_ID,可以插入新纪录到`tb_capacity_source` ,但是插入纪录到`tb_capacity_weight_source`就不行
ACMAIN_CHM 2014-09-17
  • 打赏
  • 举报
回复
`tb_capacity_result_index` (`INDEX_ID`) 表中没有对应的项。

56,678

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧