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,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_1FOREIGN KEY ( processor, posting_date) REFERENCES residual_reports( processor, posting_date) ON UPDATE CASCADE)

验证了值肯定存在于父表中,但仍然得到外键约束错误。复合外键是否缺少我的东西?

4

3 回答 3

2

我会怀疑 ENUM 的,你后来对他们做了什么吗?你改变了价值观吗?

于 2010-03-10T17:25:35.890 回答
0

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

于 2010-03-10T17:23:28.733 回答
0

你用的是什么Mysql版本?似乎他们在枚举值 http://bugs.mysql.com/bug.php?id=24985之前也有类似的问题

于 2010-03-10T17:39:55.030 回答