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`))
私が知っていると、参照値が親表に存在していることがわかります。私は複数のフィールドの主キーと参照整合性が原因と思われる。しかし、私は間違っていて、何かが明白ではないかもしれません。
それぞれのプライマリテーブルに対する検証に個別のフィールドを使用しない理由は、その組み合わせが有効で既存のものでなければならないためです。
どのような考えですか?
参照値がテーブルに存在しないように思われます。時には値が同じに見えるかもしれませんが、例えば文字列の周囲にスペースがある場合など、値は異なっていてもかまいません。 –
NEVERMIND !!私はフィールドが同じサイズではないことがわかります.. Duh! 他のすべてのフィールドと参照を削除すると、明らかに多くなります。ある意味では、質問を簡素化し、質問することは多くの助けになりました。 –