MySql – Eseguire una INSERT senza duplicati (ON DUPLICATE KEY UPDATE) 2
A partire dalla versione 4.1 di mysql, è disponibile una comodissima clausola che permette di fare una insert, e contestualmente fare un update nel caso si tenti di inserire un record già presente. E’ sufficiente avere un campo definito come primary o unique. L’insert farà un controllo su tale campo e se duplicato procederà con l’update di qualsivoglia altro campo.Questa la sintassi:
INSERT INTO esempio SET valore1=’1′, valore2=’2′ ON DUPLICATE KEY UPDATE duplicato = duplicato + 1
Il campo “duplicato” conterrà il numero di volte che è stato incontrato un doppione ed è stato eseguito l’update.
I vantaggi sono evidenti: si scrive meno codice evitando di fare delle query di select per cercare valori già presenti, e sicuramente di guadagna in termini di performances.





Scusa, io ho una tabella con un campo id che si autoincrementa esempio:
create table test2 (
id int not null auto_increment primary_key,
nome varchar(16),
cognome varchar(16)
);
Vorrei inserire una nuova riga, ma solo se questa non è già presente. Cioè: inserisco solo nome e cognome, se la coppia non c’è viene creata una nuova riga, altrimenti niente. Non mi interessa il valore del campo id, perché è ovvio che se inserisco 2 volte Mario Rossi, questo non deve apparire su due righe anche se queste due righe hanno id diverso.
Hai un’idea?
Ho miticamente risolto aggiuntendo:
alter table `test2` add unique coppia_unica(nome, cognome);
–dovrebbe funzionare anche per triple o ennuple di valori; Grazie comunque!