2010-05-28 3 views
9

J'utilise actuellement un remplacement dans la déclaration, j'ai un champ unique qui le fera à mettre à jour plutôt que INSERT si elle trouve un double ...mysql remplacer en remplacement

problème est si elle trouve un double Je n'arrive pas à mettre à jour quelques colonnes, ça efface tout.

Existe-t-il une méthode "one statement" similaire où je peux simplement mettre à jour ce que je veux?

Je l'ai trouvé, mais ne se fondent dans undertsnad pas le premier bit sur la fusion dans la table en utilisant le tableau

Répondre

16

Vous allez vouloir utiliser l'INSERT ... sur la syntaxe DUPLICATE KEY UPDATE.

http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html

Voici un exemple qui va essayer de créer un enregistrement avec un identifiant, anniversaire, et le nom. Si un enregistrement avec le champ id existe, il fera la mise à jour spécifiée. La table a beaucoup d'autres champs comme l'adresse de courrier électronique, le code postal, etc. Je veux laisser ces champs seuls si je mets à jour. (REPLACE INTO perdrait n'importe laquelle de ces données si je ne l'incluais pas dans l'instruction REPLACE INTO.)

INSERT INTO user (userid,birthday,first_name,last_name) 
    VALUES (1234,'1980-03-07','Joe','Smith') 
ON DUPLICATE KEY UPDATE 
    birthday = '1980-03-07', 
    first_name = 'Joe', 
    last_name = 'Smith'; 
+0

Great! De cette façon, il conserve la clé primaire ... – 472084

+0

Ouais, l'inconvénient est qu'il faut beaucoup d'écriture. – Anonymous

+1

L'utilisation de INSERT ... permet également d'obtenir de très bons résultats en matière de performances ... ON DUPLICATE KEY UPDATE: http://code.openark.org/blog/mysql/replace-into-think-twice. Je dirais que cela vaut une minute supplémentaire d'écriture de code ... –

Questions connexes