Contrainte unique qui autorise les valeurs vides dans MySQL


125

J'ai un champ qui stocke les codes produit. Les codes sont uniques, mais certains produits n'ont tout simplement pas de code. Je ne peux pas inventer de codes car ce sont des codes de fournisseurs.

Ce genre de contrainte est-il possible dans MySQL?

Je suis un noob avec des procédures stockées et des déclencheurs, donc si la solution implique l'un de ceux-ci, soyez patient.

Mise à jour: la colonne n'est PAS Null. C'est pourquoi je n'ai pas pu faire cela.


Double possible de MySQL ignore-t
Amir Ali Akbari

@AmirAliAkbari C'est drôle comment ces deux liens entre eux sont des "doublons possibles". Celui-ci est plus ancien, cependant. :)
Pijusn

Réponses:


182

Oui, vous pouvez le faire. Voir la référence MySQL (version 5.5) .

Un index UNIQUE crée une contrainte telle que toutes les valeurs de l'index doivent être distinctes. Une erreur se produit si vous essayez d'ajouter une nouvelle ligne avec une valeur de clé qui correspond à une ligne existante. Pour tous les moteurs, un index UNIQUE autorise plusieurs valeurs NULL pour les colonnes pouvant contenir NULL.


8
Merci. Je dois le rendre nul
The Disintegrator

eu ce problème dans le modèle django. Le rendre nullable fonctionne. Merci
Shrey

13

Oui, si vous rendez la colonne de code produit Nullable (non déclarée avec NOT NULL), la clé unique autorisera plusieurs lignes avec NULLdes codes produit.


Merci. Je dois le rendre nul
The Disintegrator

8

MySQL permet toujours à plusieurs lignes d'avoir une valeur de NULLdans une colonne unique.


Merci. Je dois le rendre nul
The Disintegrator

@MianAnjum bolded: CREATE TABLE table( keyint (11) NOT NULL AUTO_INCREMENT, fieldtinyint (1) DEFAULT NULL )
Paul Nowak
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.