Mysql 错误 #1452 - 无法添加或更新子行

Posted

技术标签:

【中文标题】Mysql 错误 #1452 - 无法添加或更新子行【英文标题】:Mysql error #1452 - Cannot add or update child row 【发布时间】:2012-02-06 18:49:50 【问题描述】:

编辑:

我的问题是因为表使用了不同的引擎。 Table Chart 使用 MyISAM,Chartdata 使用 InnoDB。


我有一个非常简单的数据库模型,但由于某种原因,我无法让外键工作。我已经使用 mysql Workbench 创建了数据库,并且在“图表”表中有两行,id 为 3 和 4。当我尝试在图表数据中添加一行时,出现此错误:

INSERT INTO `charts`.`Chartdata` (

`idChartdata` ,
`param1` ,
`param2` ,
`Chart_id` 
)
VALUES (
NULL , '2012-01-10 05:00:00', '58', '3'
) 

#1452 - Cannot add or update a child row: a foreign key constraint fails (charts.Chartdata, CONSTRAINTfk_Chartdata_ChartFOREIGN KEY (Chart_id) REFERENCESChart(idChart) ON DELETE CASCADE ON UPDATE CASCADE)

我确定外键存在,并且我曾多次尝试重新创建表(稍作更改)。

链接到数据库模型:http://i.stack.imgur.com/qKZlh.png

这是来自 PhpMyAdmin 的 SQL 转储:

CREATE TABLE IF NOT EXISTS `Chartdata` (

idChartdata int(11) NOT NULL AUTO_INCREMENT, param1 varchar(500) 默认为空, param2 varchar(500) 默认为空, Chart_id int(11) 非空, 主键 (idChartdata,Chart_id), 键fk_Chartdata_Chart (Chart_id) ) ENGINE=InnoDB 默认字符集=latin1 AUTO_INCREMENT=10 ;

更改表Chartdata 添加约束 fk_Chartdata_Chart 外键 (Chart_id) 引用 Chart (idChart) ON DELETE CASCADE ON UPDATE CASCADE;

【问题讨论】:

您能否在问题中包含失败的 SQL INSERT 语句? 我已将其添加到问题中。 我的问题是因为表使用了不同的引擎。 Table Chart 使用 MyISAM,Chartdata 使用 InnoDB。 【参考方案1】:

我的问题是因为表使用了不同的引擎。 Table Chart 使用 MyISAM,Chartdata 使用 InnoDB。

【讨论】:

解决办法是什么? 我假设我更改了其中一个表引擎,因此它们会匹配。太多年前真的不知道,但这是我的猜测。【参考方案2】:

删除INSERT 查询中的NULL,因为idChartdata 列设置为Auto_Increment,然后重试。

INSERT INTO `charts`.`Chartdata`(`param1` ,`param2` ,`Chart_id`)
VALUES ('2012-01-10 05:00:00', '58', '3') 

【讨论】:

那不起作用,空值是由phpmyadmin添加的。根据mysql,您可以使用NULL来“显式地将NULL或0分配给列以生成序列号”【参考方案3】:

您正尝试向图表数据添加一行,Chart_id = 3。是否有 idChart = 3 的图表?尝试先添加一个 id = 3 的图表,然后执行您的查询。

[edit] Nvm,你已经解决了。 :D

【讨论】:

以上是关于Mysql 错误 #1452 - 无法添加或更新子行的主要内容,如果未能解决你的问题,请参考以下文章

MySql 重启后:#1452 - 无法添加或更新子行:外键约束失败

接收错误 #1452 - 无法添加或更新子行”

Magento DB错误:完整性约束违规:1452无法添加或更新子行:外键约束失败

完整性约束违规:1452 无法添加或更新子行:

SQL 错误:SQLSTATE [23000]:完整性约束违规:1452 无法添加或更新子行:外键约束失败

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