MySQL复合外键插入失败

时间:2010-03-10 17:12:45

标签: mysql foreign-keys innodb composite-key

我有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(processorposting_date)参考residual_reportsprocessorposting_date)ON UPDATE CASCADE)

验证了父表中确实存在的值,但仍然会获得外键约束错误。是否有复合外键缺少的东西?

3 个答案:

答案 0 :(得分:2)

我会怀疑ENUM的,你之后是否对他们做了什么?你有没有改变价值观?

答案 1 :(得分:0)

您的代码按原样为我工作。是否有可能尚未提交residual_reports的更改?

答案 2 :(得分:0)

你使用什么Mysql版本?看起来他们之前有类似的问题与枚举值 http://bugs.mysql.com/bug.php?id=24985