【发布时间】: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。
标签: mysql foreign-keys mysql-workbench