Maison >base de données >tutoriel mysql >Les contraintes de clé étrangère dans MySQL InnoDB autorisent-elles les valeurs NULL ?
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>
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>
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!