使用多个字段的外键约束
问题描述:
我有两个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`))
我知道和看到,在父表中存在的参考价值。我怀疑多字段主键和参照完整性是罪魁祸首。但是我可能是错的,没有看到明显的东西。
我不使用单个字段进行验证的原因导入到其各自的主表中,原因是该组合必须有效且存在。
有什么想法?
答
字段season_id哪里不一样的大小...
CHAR(16) and CHAR(3).
我不知道如何关闭主题..
这样看来,被引用的值不存在于表。有时,值可能看起来相同,但是可能不同,例如,如果字符串周围有空格。 –
NEVERMIND !!我看到这些田地的大小不一样..杜! 一旦我删除了所有其他字段和引用,它就变得更加明显了。在某种程度上,简化和问这个问题帮了很多忙。 –