Aller au contenu


MySQL: INSERT ou UPDATE automatique

Prenons le cas suivant: vous disposez de données dans une table qui nécessitent des mises à jour. Ces mises à jour contiennent parfois des nouvelles données, parfois des corrections sur les données existantes. Vous pourriez gérer ce cas de figure dans votre script (PHP, …), par exemple en vérifiant d’abord que la donnée à traiter n’existe pas déjà, et effectuer un INSERT ou un UPDATE en fonction. Mais voici une méthode largement plus rapide, sous MySQL:
[code]
INSERT INTO latable VALUES (…) ON DUPLICATE KEY UPDATE
[/code]

Cette technique lancera l’INSERT, et en cas d’erreur DUPLICATE KEY sur une clé primaire ou unique, l’UPDATE sera lancé à sa place.

Pourquoi pas un REPLACE?

La grosse différence avec REPLACE, est que REPLACE supprime entièrement la row et effectue un nouvel INSERT en cas de doublon sur une clé.
L’avantage de la technique ON DUPLICATE KEY UPDATE est de permettre un update uniquement sur certains champs sélectionnés, et de ne pas perdre les auto-increments éventuels.

Exemple (suffisamment simple pour comprendre le fonctionnement)

[code]
INSERT INTO clients (identifiant,total_commandes) VALUES (123, 1) ON DUPLICATE KEY UPDATE total_commandes = total_commandes + 1;
[/code]

Cette requête tente d’insérer le client à identifiant unique 123 dans la DB, avec son total de commande. Si l’identifiant unique du client existe déjà, alors son total de commandes est simplement incrémenté.

Note

ON DUPLICATE KEY UPDATE exsite depuis MySQL 4.1 – voir La doc MySQL

Posté dans développement. Tags , , .

0 commentaire(s)

Quelques tags HTML sont acceptés

(obligatoire)

(obligatoire, mais ne sera pas diffusé)

ou faire un rétrolien depuis votre site.