ホームページ >データベース >mysql チュートリアル >データの整合性を維持しながら、外部キー列で NULL 値を許可できますか?

データの整合性を維持しながら、外部キー列で NULL 値を許可できますか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-11 08:10:41795ブラウズ

Can Foreign Key Columns Allow NULL Values While Maintaining Data Integrity?

外部キー列を空にすることはできますか?

外部キーを含むテーブル列を 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 サイトの他の関連記事を参照してください。

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