Maison > base de données > tutoriel mysql > Les contraintes de clé étrangère dans MySQL InnoDB autorisent-elles les valeurs NULL ?

Les contraintes de clé étrangère dans MySQL InnoDB autorisent-elles les valeurs NULL ?

Susan Sarandon
Libérer: 2025-01-11 10:07:42
original
765 Les gens l'ont consulté

Do Foreign Key Constraints in MySQL InnoDB Allow NULL Values?

Contraintes de clés étrangères et valeurs NULL dans les tables MySQL InnoDB

Question :

Les contraintes de clé étrangère dans une table de base de données peuvent-elles toujours prendre effet lorsque la colonne contient des valeurs NULL ? Surtout dans le contexte des tables MySQL et InnoDB, quel est le comportement des contraintes de clé étrangère lorsqu'une valeur NULL est rencontrée ?

Réponse :

Oui, les contraintes de clé étrangère ne peuvent être appliquées que si la valeur de la colonne de clé étrangère n'est pas NULL. Cela permet une flexibilité dans la gestion des données et garantit l’intégrité des données.

Dans MySQL, lorsqu'une colonne de table avec une contrainte de clé étrangère contient une valeur NULL, la contrainte n'est pas vérifiée. Cela signifie qu'une relation parent-enfant n'est pas appliquée pour les lignes avec NULL dans la colonne de clé étrangère.

Cependant, lorsqu'une valeur non NULL est insérée dans une colonne de clé étrangère, la base de données vérifie si la valeur existe dans la table référencée. Si la valeur n'existe pas, une erreur est générée et l'opération d'insertion échoue, empêchant l'intégrité référentielle.

Exemple :

Considérons les tables parent et enfant avec la structure suivante :

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

La requête suivante illustre le comportement des contraintes de clé étrangère avec des valeurs 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>
Copier après la connexion

Cela indique que les contraintes de clé étrangère ne sont appliquées que si la colonne de clé étrangère contient une valeur non NULL.

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