MySQL InnoDB テーブルの外部キー制約と NULL 値
質問:
列に NULL 値が含まれている場合でも、データベース テーブルの外部キー制約は有効ですか?特に MySQL および InnoDB テーブルのコンテキストでは、NULL 値が発生した場合の外部キー制約の動作はどうなりますか?
答え:
はい、外部キー制約は、外部キー列の値が NULL でない場合にのみ適用できます。これにより、データ管理が柔軟になり、データの整合性が確保されます。
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>
次のクエリは、NULL 値を使用した外部キー制約の動作を示しています。
<code class="language-sql">INSERT INTO child (id, parent_id) VALUES (1, NULL); -- 查询成功,因为 parent_id 为 NULL。 INSERT INTO child (id, parent_id) VALUES (2, 10); -- 查询失败,因为没有 id 为 10 的 parent 行。</code>
これは、外部キー列に NULL 以外の値が含まれている場合にのみ、外部キー制約が適用されることを示します。
以上がMySQL InnoDB の外部キー制約では NULL 値が許可されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。