テーブルを作成しました。 cat_parent_id
外部キーは主キーによって制約されている cat_id
これを使って:
CREATE TABLE categories (
cat_id SMALLINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
cat_parent_ID SMALLINT,
cat_name VARCHAR(40)
INDEX cat_id(cat_id),
FOREIGN KEY(cat_id) REFERENCES categories(cat_id),
);
どこにレコードを挿入しようとすると cat_parent_ID
は NULL
、私はエラーが表示されます:
#1452 - Cannot add or update a child row: a foreign key constraint fails (`myDatabase`.`categories`, CONSTRAINT `categories_ibfk_1` FOREIGN KEY (`cat_id`) REFERENCES `categories` (`cat_id`))
最初に外部キーがない場合、外部キー制約はどのように失敗する可能性がありますか? nullが許可されていない場合にのみ制約は可能ですか?
制約を無効にした場合にのみレコードを正常に挿入できますが、これは必要なことではありません。私は必要です parent_id
オプションであり、値がある場合は既存の値になります。 cat_id
のみ
回答:
回答№1は0これは円形の外部キーを作成し、テーブルへの挿入を防ぎます。
FOREIGN KEY(cat_id) REFERENCES categories(cat_id),
編集:おそらくあなたはPKをオンにするつもりだった cat_parent_id
?
回答№2の場合は0
親を持たないルートレコードが1つあります。この場合、まず外部キー制約を無効にする必要があります。
SET FOREIGN_KEY_CHECKS=0;
レコードを挿入してください。
それから外部キー制約を再び有効にすることを忘れないでください
SET FOREIGN_KEY_CHECKS=1;
それから今から、あなたの挿入物が既存の親を含むことを確認してください。
外部キーがない場合に外部キー制約が失敗する可能性 で始まる? nullが許可されていない場合にのみ制約は可能ですか?
FK値を持たない他のレコードを追加したい場合は、NULLが許可されていることを確認してください。