2010-05-28 15 views
9

Attualmente sto usando una sostituzione nella dichiarazione, ho un campo unico che farà sì che a UPDATE piuttosto che INSERIRE se trova un duplicato ...mysql sostituire in alternativa

Il problema è se trova un duplicato non riesco ad aggiornarmi su poche colonne, semplicemente mi asciugo.

Esiste un metodo "one statement" simile in cui posso solo AGGIORNARE ciò che voglio?

ho trovato fondono in ma non undertsnad la prima po 'di unire nella tabella utilizzando la tabella

risposta

16

Stai andando a voler utilizzare l'INSERT ... ON DUPLICATE sintassi UPDATE KEY.

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

Ecco un esempio che cercherà di creare un record con un ID, il compleanno, e il nome. Se esiste un record con il campo id, verrà eseguito l'aggiornamento specificato. Il tavolo ha molti altri campi come indirizzo email, codice postale, ecc. Voglio lasciare quei campi da solo se aggiorno. (REPLACE INTO perderebbe nessuno di quei dati se non lo includessi nell'istruzione 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

Grande! In questo modo mantiene la chiave primaria ... – 472084

+0

Sì, lo svantaggio è che ci vuole molto tempo per scrivere. – Anonymous

+1

Esiste anche potenzialmente un notevole vantaggio in termini di prestazioni dall'utilizzo di INSERT ... ON DUPLICATE KEY UPDATE: http://code.openark.org/blog/mysql/replace-into-think-twice. Direi che vale un ulteriore minuto di scrittura del codice ... –