ホームページ >データベース >mysql チュートリアル >MySQL の InnoDB では外部キー列は NULL 値を受け入れることができますか?

MySQL の InnoDB では外部キー列は NULL 値を受け入れることができますか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-11 07:33:51283ブラウズ

Can Foreign Key Columns Accept NULL Values in MySQL's InnoDB?

データベーステーブル列の外部キーと NULL 値

データベース設計では、テーブル間の関係を強制することでデータの整合性を確保するために、外部キー制約がよく使用されます。ただし、外部キーを持つテーブル列は NULL 値を保持できるのかという疑問が生じます。

提供された質問に示されているように、値が明示的に設定されている場合にのみ外部キー制約を適用する必要がある状況が考えられます。これにより、値が設定された後のデータの整合性を確保しながら、NULL 値を持つレコードを最初に外部キー列に挿入できます。

MySQL および InnoDB テーブル タイプでは、NULL 値を許可する非 NULL 外部キーを持つことが実際に可能です。次の例はこれを示しています:

<code class="language-sql">CREATE DATABASE t;
USE t;

CREATE TABLE parent (id INT NOT NULL,
                     PRIMARY KEY (id)
) ENGINE=INNODB;

CREATE TABLE child (id INT NULL,
                    parent_id INT NULL,
                    FOREIGN KEY (parent_id) REFERENCES parent(id)
) ENGINE=INNODB;</code>

parent_id が NULL であるレコードを child テーブルに挿入できるようにします:

<code class="language-sql">INSERT INTO child (id, parent_id) VALUES (1, NULL);</code>

ただし、parent_id 値が parent テーブルに存在しないレコードを挿入しようとすると、外部キー制約違反が発生します:

<code class="language-sql">INSERT INTO child (id, parent_id) VALUES (2, 1);

-- ERROR 1452 (23000): Cannot add or update a child row: a foreign key
-- constraint fails (`t/child`, CONSTRAINT `child_ibfk_1` FOREIGN KEY
-- (`parent_id`) REFERENCES `parent` (`id`))</code>

この動作は、MySQL と InnoDB が外部キー列に NULL 値を許可し、非 NULL 値が指定された場合にのみ制約を適用することを確認します。これは、外部キー列に初期 NULL 値を許可しながら、外部キー列にデータが設定されるときに外部キー制約が強制されるべきであるという期待と一致しています。

以上がMySQL の InnoDB では外部キー列は NULL 値を受け入れることができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。