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

时间:2012-01-10 10:40:11

标签: mysql foreign-keys mysql-workbench

编辑:

我的问题是因为表格使用了不同的引擎。表格图表使用了MyISAM和Chartdata使用的InnoDB。


我有一个非常简单的数据库模型但由于某种原因我不能让外键工作。我用Mysql Workbench创建了数据库,我在'Chart'表中有两行,ID为3和4.当我尝试在chartdata中添加一行时出现此错误:

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 ( {图表{1}} {Chartdata {1}} {fk_Chartdata_Chart {1}} {Chart_id {1}} {图表{1}} {idChart {1}}

我确信外键存在,并且我尝试重新创建表格(稍作更改)。

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

这是来自PhpMyAdmin的SQL转储:

.

, CONSTRAINT int(11)NOT NULL AUTO_INCREMENT,   FOREIGN KEY ( varchar(500)DEFAULT NULL,   ) REFERENCES varchar(500)DEFAULT NULL,   ( int(11)NOT NULL,   PRIMARY KEY() ON DELETE CASCADE ON UPDATE CASCADE)CREATE TABLE IF NOT EXISTS `Chartdata` ( ),   KEY idChartdataparam1) )ENGINE = InnoDB DEFAULT CHARSET = latin1 AUTO_INCREMENT = 10;

ALTER TABLE param2   添加约束Chart_id FOREIGN KEY(idChartdata)引用Chart_idfk_Chartdata_Chart)ON DELETE CASCADE ON UPDATE CASCADE;

3 个答案:

答案 0 :(得分:2)

我的问题是因为表使用了不同的引擎。表格图表使用了MyISAM和Chartdata使用的InnoDB。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

您正在尝试向chartdata添加一行,Chart_id = 3.是否存在idChart = 3的图表?首先尝试添加id = 3的图表,然后执行查询。

[编辑] Nvm,你已经解决了。 :d