2017-06-13 21 views
0

2つのInnoDBテーブルがあります。最初のテーブルには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' 
; 

表1:レコード

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

表2を作成

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' 
; 

2番目の表は、同じ2つのフィールドを使用して第1のに対して検証しますが有効であるはずのレコードを追加できません。

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 !!私はフィールドが同じサイズではないことがわかります.. Duh! 他のすべてのフィールドと参照を削除すると、明らかに多くなります。ある意味では、質問を簡素化し、質問することは多くの助けになりました。 –

答えて

1

フィールドはどこなく、同じサイズ...私は、被写体をクローズする方法がわからない

CHAR(16) and CHAR(3). 

.. season_id