2010-06-21 7 views
9

J'ai remarqué que si j'ai une clé composée unique pour deux colonnes, column_a et column_b, alors mon sql ignore cette contrainte si une colonne est nulle.Clés composées MySql et valeurs nulles

E.g.

si column_a = 1 et column_b = null je peux insérer column_a = 1 et column_b = null autant que je l'aime

si column_a = 1 et column_b = 2 I ne peut insérer cette valeur une fois.

Existe-t-il un moyen d'appliquer cette contrainte, à part peut-être changer les colonnes à Not Null et définir les valeurs par défaut?

Répondre

13

http://dev.mysql.com/doc/refman/5.0/en/create-index.html

« Un index unique crée une contrainte telle que toutes les valeurs de l'indice doivent être distincts. Une erreur se produit si vous essayez d'ajouter une nouvelle ligne avec une valeur de clé qui correspond à une ligne existante. Cette contrainte ne s'applique pas aux valeurs NULL sauf pour le moteur de stockage BDB Pour les autres moteurs, un index UNIQUE autorise plusieurs valeurs NULL pour les colonnes pouvant contenir NULL. " Donc, non, vous ne pouvez pas demander à MySQL de traiter NULL comme une valeur unique. Je suppose que vous avez quelques choix: vous pourriez faire ce que vous avez suggéré dans votre question et stocker une "valeur spéciale" au lieu de null, ou vous pourriez utiliser le moteur BDB pour la table. Je ne pense pas que cette différence mineure de comportement justifie un choix inhabituel de moteur de stockage, cependant.

+0

Merci marteau! oui, stocker une valeur spéciale ne fera pas trop mal et est certainement une meilleure option pour moi que de changer le mécanisme de stockage. – stevebot

Questions connexes