Articolo scritto

  • il 21.01.2010
  • alle 04:08 PM
  • da Giuseppe

MySql – Eseguire una INSERT senza duplicati (ON DUPLICATE KEY UPDATE) 2

gen21

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.

RSS dei commenti

There are 2 comments for this post

  1. Fra scrive:

    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?

  2. Fra scrive:

    Ho miticamente risolto aggiuntendo:

    alter table `test2` add unique coppia_unica(nome, cognome);
    –dovrebbe funzionare anche per triple o ennuple di valori; Grazie comunque!

Scrivi un commento

* campi richiesti

Powered by WordPress and FREEmium Theme. developed by Dariusz Siedlecki and brought to you by FreebiesDock.com