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

Les colonnes de clé étrangère peuvent-elles accepter les valeurs NULL dans InnoDB de MySQL ?

Barbara Streisand
Libérer: 2025-01-11 07:33:51
original
355 Les gens l'ont consulté

Can Foreign Key Columns Accept NULL Values in MySQL's InnoDB?

Clés étrangères et valeurs NULL dans les colonnes de la table de base de données

Dans la conception de bases de données, les contraintes de clé étrangère sont souvent utilisées pour garantir l'intégrité des données en appliquant les relations entre les tables. Cependant, la question se pose : les colonnes de table avec des clés étrangères sont-elles autorisées à contenir des valeurs NULL ?

Comme le montre la question fournie, il peut y avoir des situations dans lesquelles les contraintes de clé étrangère doivent être appliquées uniquement lorsque la valeur est explicitement définie. Cela permet d'insérer initialement des enregistrements avec des valeurs NULL dans des colonnes de clé étrangère tout en garantissant l'intégrité des données une fois les valeurs renseignées.

Dans les types de tables MySQL et InnoDB, il est en effet possible d'avoir des clés étrangères non NULL qui autorisent les valeurs NULL. L'exemple suivant le démontre :

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

Autoriser les enregistrements avec parent_id à NULL à insérer dans la table child :

INSERT INTO child (id, parent_id) VALUES (1, NULL);
Copier après la connexion

Cependant, tenter d'insérer un enregistrement dont la valeur parent_id n'existe pas dans la table parent entraînera une violation de contrainte de clé étrangère :

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

Ce comportement confirme que MySQL et InnoDB autorisent les valeurs NULL pour les colonnes de clé étrangère et n'appliquent des contraintes que lorsqu'une valeur non NULL est fournie. Cela est cohérent avec l'attente selon laquelle les contraintes de clé étrangère doivent être appliquées lorsque la colonne de clé étrangère est remplie de données, tout en autorisant les valeurs NULL initiales dans la colonne de clé étrangère.

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