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.

Le désintégrateur
la source
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.

EricC
la source
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.

le chaos
la source
Merci. Je dois le rendre nul
The Disintegrator
8

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

cg.
la source
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