我有2个表,在2之间有一个复合外键。当我尝试在子表中插入一行时,即使父表中存在值,我也会遇到约束失败。
以下是父表的概述:
CREATE TABLE `residual_reports` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`processor` enum('1','2','3') NOT NULL,
`posting_date` date NOT NULL DEFAULT '0000-00-00',
`approved_on` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `posting_date_2` (`processor`,`posting_date`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=latin1
子表具有处理器的外键和发布日期列:
CREATE TABLE `residual_data` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`mid` varchar(29) DEFAULT NULL,
`processor` enum('1','2','3') NOT NULL,
`posting_date` date NOT NULL,
......
PRIMARY KEY (`id`),
KEY `residual_data_ibfk_1` (`processor`,`posting_date`),
CONSTRAINT `residual_data_ibfk_1` FOREIGN KEY (`processor`, `posting_date`) REFERENCES `residual_reports` (`processor`, `posting_date`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1
我在residual_reports表中插入了一行,处理器= 1,发布_date = 2010-03-10。
当我尝试使用processor = 1和posting_date = 2010-03-10插入residual_data表时。
INSERT INTO `residual_data`(processor,posting_date) VALUES ('1','2010-03-10');
我得到了:
[Err] 1452 - 无法添加或更新子行:外键约束失败(residual_data
,CONSTRAINT residual_data_ibfk_1
FOREIGN KEY(processor
,posting_date
)参考residual_reports
(processor
,posting_date
)ON UPDATE CASCADE)
验证了父表中确实存在的值,但仍然会获得外键约束错误。是否有复合外键缺少的东西?
答案 0 :(得分:2)
我会怀疑ENUM的,你之后是否对他们做了什么?你有没有改变价值观?
答案 1 :(得分:0)
您的代码按原样为我工作。是否有可能尚未提交residual_reports
的更改?
答案 2 :(得分:0)
你使用什么Mysql版本?看起来他们之前有类似的问题与枚举值 http://bugs.mysql.com/bug.php?id=24985