ホームページ >データベース >mysql チュートリアル >データの整合性を維持しながら、外部キー列で NULL 値を許可できますか?
外部キー列を空にすることはできますか?
外部キーを含むテーブル列を NULL に設定できますか?これは、データの整合性を維持する必要があるが、外部キー列に常に値があるとは限らない状況で特に重要です。
答え: 条件付き制約の適用
はい、値が NULL でない場合にのみ外部キー制約を適用できます。これにより、外部キー列に null 値を許可しながら、データの整合性が確保されます。
これを説明するために、次の MySQL サンプル コードを考えてみましょう:
<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>
NULL のparent_id を使用した挿入操作は成功します:
<code class="language-sql">INSERT INTO child (id, parent_id) VALUES (1, NULL);</code>
ただし、親テーブルに存在しない値をparent_idに挿入すると、外部キー制約違反が発生します:
<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>
これは、parent_id 列に有効な参照が含まれている場合にのみ外部キー制約が適用され、実質的に NULL 値が制約を回避できることを示します。
以上がデータの整合性を維持しながら、外部キー列で NULL 値を許可できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。