我有2個表與2之間的複合外鍵當我嘗試插入一個行到子表中時,即使值存在父表中,我得到約束失敗。MySQL複合外鍵插入失敗
這裏的父表的概述:
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');
我得到一個:
[錯誤] 1452 - 不能添加或更新子行,外鍵約束失敗(residual_data
,約束residual_data_ibfk_1
外鍵(processor
,posting_date
)參考文獻residual_reports
(processor
, posting_date
)ON UPDATE CASCADE)
已確認值在父表中確實存在,但仍然會獲得外鍵約束錯誤。有什麼我錯過了複合外鍵?
好的,所以它必須如此與ENUM數據類型。我把它切換到TINYINT,它工作正常。任何人都知道有關外鍵和ENUM類型數據的任何文檔可以支持這一點? – Jestep 2010-03-10 17:24:07