データベーステーブルを設計する際には、データの整合性を確保することが重要です。外部キーを介した他のテーブルの列への参照は、これらの接続を維持する上で重要な役割を果たします。よくある質問は、「外部キーを持つテーブル列は NULL 値を許可しますか?」です。
InnoDB テーブル タイプを使用する MySQL では、答えは「はい」です。外部キー列を NULL 可能として宣言できます。この動作により、外部キー列に NULL 値を持つ新しい行を挿入できますが、非 NULL 値を入力する場合は制約が適用されます。
これを説明するために、次の例を考えてみましょう:
<code class="language-sql">CREATE TABLE parent (id INT NOT NULL, PRIMARY KEY (id)); CREATE TABLE child ( id INT NULL, parent_id INT NULL, FOREIGN KEY (parent_id) REFERENCES parent(id) );</code>
次に、「parent_id」が NULL である行を「子」テーブルに挿入しましょう。
<code class="language-sql">INSERT INTO child (id, parent_id) VALUES (1, NULL); -- 查询成功,影响 1 行 (0.01 秒)</code>
「parent_id」列に NULL 値を指定したため、この挿入操作は成功しました。ただし、「親」テーブルに存在しない非 NULL 値を挿入しようとすると、外部キー制約が適用されるため、エラーが発生します:
<code class="language-sql">INSERT INTO child (id, parent_id) VALUES (2, 1); -- 错误 1452 (23000):无法添加或更新子行:外键约束失败 (`t/child`, CONSTRAINT `child_ibfk_1` FOREIGN KEY (`parent_id`) REFERENCES `parent` (`id`))</code>
この動作により、データの整合性に対する柔軟性と制御が提供されます。データ入力中に一時的な NULL 値を許可しながら、後で外部キー制約を強制することができます。外部キー列の NULL 制約を慎重に管理することで、データの正確性と一貫性を確保できます。
以上がMySQL 外部キーは NULL 値を許可できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。