web-dev-qa-db-fra.com

MySQL - ignore l'erreur d'insertion: entrée en double

Je travaille en PHP.

Veuillez indiquer la méthode appropriée pour insérer de nouveaux enregistrements dans la base de données, qui possède un champ unique. J'insère beaucoup d'enregistrements dans un lot et je veux juste que les nouveaux soient insérés et je ne veux pas d'erreur pour l'entrée en double.

Existe-t-il un seul moyen de créer d'abord un SELECT et de voir si l'entrée est déjà présente avant INSERT - et d'insérer uniquement lorsque SELECT ne renvoie aucun enregistrement? J'espère que non.

J'aimerais en quelque sorte dire à MySQL d'ignorer ces insertions sans aucune erreur.

Merci

72
neon

Vous pouvez utiliser la syntaxe INSERT ... IGNORE si vous ne voulez rien faire lorsqu'il y a un enregistrement en double.

Vous pouvez utiliser la syntaxe REPLACE INTO si vous souhaitez remplacer un ancien enregistrement par un nouveau avec la même clé.

Vous pouvez aussi utiliser la syntaxe INSERT ... ON DUPLICATE KEY UPDATE si vous souhaitez effectuer une mise à jour de l'enregistrement lorsque vous rencontrez un doublon.

Edit: Je pensais ajouter quelques exemples.

Exemples

Supposons que vous ayez une table nommée tbl avec deux colonnes, id et value. Il y a une entrée, id = 1 et valeur = 1. Si vous exécutez les instructions suivantes:

REPLACE INTO tbl VALUES(1,50);

Vous avez toujours un enregistrement, avec id = 1 valeur = 50. Notez toutefois que l’ensemble de l’enregistrement a d'abord été supprimé puis réinséré. Ensuite:

INSERT IGNORE INTO tbl VALUES (1,10);

L'opération s'exécute correctement, mais rien n'est inséré. Vous avez toujours id = 1 et valeur = 50. Finalement:

INSERT INTO tbl VALUES (1,200) ON DUPLICATE KEY UPDATE value=200;

Vous avez maintenant un seul enregistrement avec id = 1 et valeur = 200.

157
zombat