Tu as deux possibilités, qui supposent toutes les deux une clé primaire ou unique sur le nom.
Si je suppose que ta table est comme ça :
ta_table(nom UNIQUE KEY, couleur, taille) ;
1) le REPLACE est une combinaison de DELETE et INSERT. Donc l'ordre suivant :
1 2
| REPLACE INTO ta_table (nom, couleur)
VALUES ('toto', 'bleu') ; |
va insérer une ligne toto si elle n'existe pas déjà, ou bien supprimer la ligne toto existante et insérer la nouvelle ligne à la place. Dans ce dernier cas, l'info sur la taille, qui n'est pas dans la requête de remplacement, sera perdue.
2) le ON DUPLICATE KEY permet de combiner un INSERT avec un UPDATE. Exemple équivalent :
1 2 3
| INSERT INTO ta_table (nom, couleur)
VALUES ('toto', 'bleu')
ON DUPLICATE KEY UPDATE couleur = 'bleu' |
Avec les deux syntaxes, tu peux savoir ce qui s'est passé en regardant le myslq_affected_rows(). Si c'est 1, ça veut dire qu'il y a eu une insertion simple, si c'est 2, ça veut dire que la ligne existait déjà.
Partager