我有 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,posting_date = 2010-03-10。
当我尝试使用处理器 = 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
) REFERENCES residual_reports
( processor
, posting_date
) ON UPDATE CASCADE)
验证了值肯定存在于父表中,但仍然得到外键约束错误。复合外键是否缺少我的东西?