/ / MySQL - 同じテーブル内の主キーによって制約されている外部キー、エラー#1452 - mysql

MySQL - 同一テーブル内の主キーによって制約される外部キー、エラー#1452 - mysql

テーブルを作成しました。 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_IDNULL、私はエラーが表示されます:

#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が許可されていることを確認してください。