J'ai une colonne e-mail que je veux être unique. Mais je veux aussi qu'il accepte des valeurs nulles. Ma base de données peut-elle avoir 2 e-mails nuls de cette façon?
J'ai une colonne e-mail que je veux être unique. Mais je veux aussi qu'il accepte des valeurs nulles. Ma base de données peut-elle avoir 2 e-mails nuls de cette façon?
Réponses:
Oui, MySQL autorise plusieurs NULL dans une colonne avec une contrainte unique.
CREATE TABLE table1 (x INT NULL UNIQUE);
INSERT table1 VALUES (1);
INSERT table1 VALUES (1); -- Duplicate entry '1' for key 'x'
INSERT table1 VALUES (NULL);
INSERT table1 VALUES (NULL);
SELECT * FROM table1;
Résultat:
x
NULL
NULL
1
Ce n'est pas vrai pour toutes les bases de données. SQL Server 2005 et les versions antérieures, par exemple, n'autorisent qu'une seule valeur NULL dans une colonne qui a une contrainte unique.
WHERE column IS NOT NULLsemble même pas me manquer car il n'est pas pris en charge dans ma version de MySQL. Quelqu'un sait où je pourrais regarder?
De la documentation :
"un index UNIQUE autorise plusieurs valeurs NULL pour les colonnes pouvant contenir NULL"
Cela s'applique à tous les moteurs sauf BDB .
Je ne sais pas si l'auteur demandait à l'origine si cela autorisait ou non les valeurs en double ou s'il y avait une question implicite ici demandant: "Comment autoriser les NULLvaleurs en double lors de l'utilisation UNIQUE?" Ou "Comment n'autoriser qu'une seule UNIQUE NULLvaleur?"
La question a déjà été répondue, oui, vous pouvez avoir des NULLvaleurs en double lors de l'utilisation de l' UNIQUEindex.
Depuis que je suis tombé sur cette réponse en cherchant "comment autoriser une UNIQUE NULLvaleur". Pour tous ceux qui pourraient tomber sur cette question en faisant de même, le reste de ma réponse est pour vous ...
Dans MySQL, vous ne pouvez pas avoir une UNIQUE NULLvaleur, mais vous pouvez avoir une UNIQUEvaleur vide en l'insérant avec la valeur d'une chaîne vide.
Avertissement: les valeurs numériques et autres que la chaîne peuvent être par défaut égales à 0 ou à une autre valeur par défaut.
UNIQUEcontrainte mais à cause de la NOT NULLcontrainte. Je pense que cette réponse est sans rapport avec la question parce que la question concerne spécifiquement le comportement de la UNIQUEcontrainte.
Évitez les contraintes uniques nullables. Vous pouvez toujours placer la colonne dans une nouvelle table, la rendre non nulle et unique, puis remplir cette table uniquement lorsque vous avez une valeur pour celle-ci. Cela garantit que toute dépendance de clé sur la colonne peut être correctement appliquée et évite tout problème pouvant être causé par des valeurs NULL.