Comment faire un INSERT ou UPDATE en une seule requête avec MySQL

Publié le 20 Janvier 2012

Je dois souvent enregistrer des données dans une base de données (ici MySQL) mais je ne sais pas forcément si ces données existent déjà en base.

Pourtant c'est cette information qui permet de choisir la requête à effectuer: INSERT ou UPDATE.

La solution la plus simple consiste à faire 2 requêtes:

Un SELECT pour vérifier l'existence des données puis un INSERT ou UPDATE en fonction du résultat de la première requête.

Mais ce n'est pas du tout optimum car on fait 2 requêtes au lieu d'une et je ne parle même pas du cas où on veut faire un multi-INSERT du genre:

INSERT INTO ma_table (a, b, c) VALUES (1, 2, 3), (4, 5, 6), ...

Heureusement MySQL a prévu le cas et nous fournit un magnifique: ON DUPLICATE KEY ce qui donne:

INSERT INTO ma_table (a, b, c) VALUES (1, 2, 3), (4, 5, 6) ON DUPLICATE KEY UPDATE c = VALUES(a)+VALUES(b);

Ici VALUES retourne la valeur du champ correspondant. Par exemple:

VALUES(a) retourne 1 pour (1,2,3) et 4 pour (4,5,6).

Rédigé par Bliz

Publié dans #MySQL

Repost0
Pour être informé des derniers articles, inscrivez vous :
Commenter cet article