2010-06-06 9 views
3

Autrefois, j'utilisais le moteur de stockage MyISAM pour MySql et j'avais défini la combinaison de trois champs comme unique.MySql, InnoDB & Null Values ​​

Maintenant, je suis passé à InnoDB, ce que je suppose a causé ce problème, et maintenant NULL! = NULL.

Donc, pour le tableau suivant:

ID (Auto) | Field_A | Field_B | Field_C 

Je peux insérer (Champ_A, Champ_B, Champ_C) Valeurs (1,2, NULL) (1,2, NULL) (1,2, NULL) infiniment plusieurs fois.

Comment puis-je empêcher ce comportement?

Répondre

1

Dépend des règles métier, mais la première idée consiste à définir field_a et field_b en tant que clé primaire pour la table. Une colonne AUTO_INCREMENT peut être utilisé pour une colonne de clé primaire, mais l'attribut clé doit être associée à la colonne auto_increment:

CREATE TABLE your_table (
    ID int auto_increment not null, 
    Field_A VARCHAR(45), 
    Field_B VARCHAR(45), 
    Field_C VARCHAR(45), 
    key(ID), --without this, you'll get MySQL ERROR #1075 
    primary key(field_a, field_b) 
); 

L'autre alternative est d'ajouter une unique constraint (MySQL implements them as an index):

CREATE UNIQUE INDEX blah_ind USING BTREE ON your_table(field_a, field_b) 
+1

connexes : http://forums.mysql.com/read.php?22,264498,264967#msg-264967 –

+0

J'ai été capable de créer un index sur mon champ automatique, puis de supprimer la clé primaire. J'ai ensuite assigné les champs A, B et C comme primaire comme suggéré. Merci beaucoup! – pws5068

+0

@ pws5068: Sachez que cela permettra des doublons de 'field_c' pour chaque paire unique d'ensembles' field_a' et 'field_b'. –