2017-06-13 32 views
0

我有兩個InnoDB表。第一個表有兩個字段的主鍵,兩個字段都用參照完整性進行了驗證,並且都很好。第二個表驗證對所述第一使用相同的兩個字段:使用多個字段的外鍵約束

表1:

CREATE TABLE valid_combo(
season_id   CHAR(16) NOT NULL, 
ad_id    INT UNSIGNED NOT NULL, 
PRIMARY KEY (season_id, ad_id) 
)ENGINE=INNODB 
COMMENT='Parent Table of valid choices' 
; 

創建記錄

INSERT INTO valid_combo (season_id, ad_id) VALUES ('SEASON', 100); 

表2:

CREATE TABLE user_combo(
uid    INT UNSIGNED NOT NULL, 
season_id   CHAR(3)  NOT NULL, 
ad_id    INT UNSIGNED NOT NULL, 
PRIMARY KEY (uid, season_id, ad_id), 
INDEX IDX_season_ad(season_id, ad_id), 
UNIQUE INDEX AK_seasons_users_ads(season_id, uid, ad_id), 
CONSTRAINT Refseason_ads451 FOREIGN KEY (season_id, ad_id) 
REFERENCES valid_combo(season_id, ad_id) 
)ENGINE=INNODB 
COMMENT='Child table with users choices out of valid combos' 
; 

不知何故,我不能添加應該驗證的記錄。

INSERT INTO user_combo (uid, season_id, ad_id) VALUES (200, 'SEASON', 100); 

我得到的錯誤:

ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test`.`user_combo`, CONSTRAINT `Refseason_ads451` FOREIGN KEY (`season_id`, `ad_id`) REFERENCES `valid_combo` (`season_id`, `ad_id`)) 

我知道和看到,在父表中存在的參考價值。我懷疑多字段主鍵和參照完整性是罪魁禍首。但是我可能是錯的,沒有看到明顯的東西。

我不使用單個字段進行驗證的原因導入到其各自的主表中,原因是該組合必須有效且存在。

有什麼想法?

+0

這樣看來,被引用的值不存在於表。有時,值可能看起來相同,但是可能不同,例如,如果字符串周圍有空格。 –

+0

NEVERMIND !!我看到這些田地的大小不一樣..杜! 一旦我刪除了所有其他字段和引用,它就變得更加明顯了。在某種程度上,簡化和問這個問題幫了很多忙。 –

回答

1

字段season_id哪裏不一樣的大小...

CHAR(16) and CHAR(3). 

我不知道如何關閉主題..