Maison >base de données >tutoriel mysql >Les colonnes de clé étrangère peuvent-elles accepter les valeurs NULL dans InnoDB de MySQL ?
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 :
<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>
Autoriser les enregistrements avec parent_id
à NULL à insérer dans la table child
:
<code class="language-sql">INSERT INTO child (id, parent_id) VALUES (1, NULL);</code>
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 :
<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>
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!