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
Libérer: 2025-01-11 08:10:41
original
792 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal