ホームページ >データベース >mysql チュートリアル >MySQL の InnoDB では外部キー列は NULL 値を受け入れることができますか?
データベーステーブル列の外部キーと 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 サイトの他の関連記事を参照してください。