2010-06-10 6 views
2

J'ai une table partitionnée InnoDB avec plusieurs champs. J'essaie d'éviter les doublons sur l'insertion.Insertion d'enregistrements dans Mysql avec les valeurs INSERT IGNORE et NULL

Disons que:

Field1 int null 
Field2 int null 
Field3 int null 
Field4 int null 
Field5 int null 

J'ai créé un index unique sur ces champs. J'essaie d'insérer des enregistrements avec des valeurs NULL, puis j'essaie de les réinsérer avec la fonction IGNORE sur MySql.

Malheureusement, il semble que les enregistrements aient été répliqués lors de l'utilisation de valeurs NULL. Si j'essaie avec des zéros au lieu des cas NULL tout fonctionne, mais j'ai besoin des zéros là.

Des idées?

+0

Veuillez cocher la réponse comme correcte. La réponse a1ex07 m'a aidé avec une situation similaire. –

Répondre

5

Voici comment fonctionne NULL. Gardez à l'esprit que le résultat de la comparaison d'égalité de deux valeurs NULL est NULL (ce qui évalue à FALSE dans les expressions logiques). Ainsi, même si vous avez une contrainte unique sur la colonne Field1 qui autorise la valeur NULL, la table peut contenir plus d'un enregistrement où la valeur de Field1 est NULL. Si vous souhaitez traiter NULL différemment, en plus de la contrainte unique, vous devez écrire des déclencheurs BEFORE INSERT/UPDATE qui vérifient s'il existe un enregistrement dans la table où Field1 IS NULL (et déclenche une erreur pour empêcher la mise à jour).

+0

Donc, si je fais cela que RAISE ERROR ignorera que seul enregistrement et mon insertion complète sera ignorée? Y a-t-il un moyen d'ignorer seulement cet enregistrement? Merci! – Homer1980ar

+0

Cette réponse doit être marquée comme correcte. –