Maison >base de données >tutoriel mysql >Les colonnes de clé étrangère peuvent-elles autoriser les valeurs NULL tout en préservant l'intégrité des données ?

Les colonnes de clé étrangère peuvent-elles autoriser les valeurs NULL tout en préservant l'intégrité des données ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-11 08:10:41791parcourir

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

Les colonnes de clé étrangère peuvent-elles être vides ?

Une colonne de table contenant une clé étrangère peut-elle être définie sur NULL ? Ceci est particulièrement important dans les situations où l'intégrité des données doit être maintenue mais où la colonne de clé étrangère n'a pas toujours de valeur.

Réponse : Application de contraintes conditionnelles

Oui, il est possible d'appliquer des contraintes de clé étrangère uniquement si la valeur n'est pas NULL. Cela garantit l'intégrité des données tout en autorisant les valeurs nulles dans les colonnes de clé étrangère.

Pour illustrer cela, considérons l'exemple de code MySQL suivant :

<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>

L'opération d'insertion avec NULL parent_id réussira :

<code class="language-sql">INSERT INTO child (id, parent_id) VALUES (1, NULL);</code>

Cependant, l'insertion d'une valeur dans parent_id qui n'existe pas dans la table parent entraînera une violation de contrainte de clé étrangère :

<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>

Cela indique que les contraintes de clé étrangère ne sont appliquées que si la colonne parent_id contient une référence valide, permettant effectivement aux valeurs nulles d'éviter la contrainte.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn