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 NULL
semble 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 NULL
valeurs en double lors de l'utilisation UNIQUE
?" Ou "Comment n'autoriser qu'une seule UNIQUE
NULL
valeur?"
La question a déjà été répondue, oui, vous pouvez avoir des NULL
valeurs en double lors de l'utilisation de l' UNIQUE
index.
Depuis que je suis tombé sur cette réponse en cherchant "comment autoriser une UNIQUE
NULL
valeur". 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
NULL
valeur, mais vous pouvez avoir une UNIQUE
valeur 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.
UNIQUE
contrainte mais à cause de la NOT NULL
contrainte. Je pense que cette réponse est sans rapport avec la question parce que la question concerne spécifiquement le comportement de la UNIQUE
contrainte.
É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.