PRATIQUE OUTILS 
MySQL : mettre à jour les entrées existantes
 
"Si j'envoie une donnée vers une base MySQL, comment l'insérer si elle n'existe pas déjà, et mettre à jour sa valeur si elle existe déjà, sans devoir compliquer le code SQL ou PHP ?" (29/06/2006)
  Forum

Réagissez dans les forums de JDN Développeurs

Les insertions dans une base de données ne se font pas toujours sur de nouvelles données, mais plus souvent qu'on ne croit, sur des mises à jour à réaliser sur des données existantes. Parmi ces cas se trouve celui où l'on ne peut être sûr si la donnée est déjà dans la base ou pas, et donc si l'on doit envoyer une commande INSERT ou une commande UPDATE sur la ligne visée.

MySQL propose, depuis sa version 4.1, une option de sa commande INSERT allant dans ce sens : ON DUPLICATE KEY. Celle-ci est une extension MySQL spécifiquement conçue pour répondre à ce besoin : insérer la donnée si elle n'existe pas, la mettre à jour dans le cas contraire. Elle ne fonctionne que pour les lignes déclarées UNIQUE ou PRIMARY KEY - c'est-à-dire, celles ne pouvant de toute façon par être présentes en double dans la base.

L'exemple classique d'utilisation de cette fonctionnalité est celle du compteur mis à jour :

  1. INSERT INTO visiteurs VALUES('83.206.214.129', 1) ON DUPLICATE KEY UPDATE nbrVisites = nbrVisites + 1;
...ou...

  1. INSERT INTO sondage(preference, nbrVotes) VALUES ('Choix 1', 1) ON DUPLICATE KEY UPDATE nbrVotes = nbrVotes + 1;
Cette extension évite donc au développeur de devoir écrire du code supplémentaire pour contourner l'erreur renvoyée par MySQL en cas de doublon sur un champ unique.
 
Xavier Borderie, JDN Développeurs
 
 
Accueil | Haut de page