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, CONSTRAINT
fk_Chartdata_ChartFOREIGN KEY (
Chart_id) REFERENCES
Chart(
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 - 无法添加或更新子行:外键约束失败
Magento DB错误:完整性约束违规:1452无法添加或更新子行:外键约束失败