2010-01-31 8 views
10

Je construis un système de notation, et je veux insérer une nouvelle ligne, si le champ namene contient déjà le name je veux insérer, et si elle existe, je veux augmenter le champ count par 1MySQL Insérer le double clé

par exemple, si j'ai une rangée le la name « Tom » et je tente d'insérer une autre ligne avec le name « Tom, alors je veux +1 pour le champ count sur la ligne qui existe déjà.

Si une ligne avec le name « Tom » existe pas, je veux insérer un nouveau et mis count à 1.

Je sais que je pouvais faire avec environ 3 instructions SQL et quelques if déclarations, mais cela ralentirait le script car des commandes de 2/3 sql sont en cours d'exécution.

Des idées? Merci!

Répondre

12

voir INSERT ... ON DUPLICATE KEY UPDATE

Si vous spécifiez ON DUPLICATE KEY UPDATE et une ligne est insérée qui engendre un doublon dans un index UNIQUE ou une clé primaire une mise à jour de l'ancienne ligne est effectuée.

par exemple.

INSERT INTO table (name,counter) VALUES ('Bob', 1) 
    ON DUPLICATE KEY UPDATE counter=counter+1 
+0

hmm, ça ne marche pas tout à fait - pas d'erreurs cependant. Puis-je spécifier le champ qu'il doit "ON DUPLICATE" de? – tarnfeld

+0

trié, je l'ai ajouté dans les touches primaires de la table: D – tarnfeld

+0

Ne doit pas être la clé primaire. Une clé unique suffit (même si PRIMARY est toujours unique) – VolkerK