Home
Home
Tutorials
   PHP
   Java
   Tutti...
Manuali
SmartImage
Marketing
Downloads
Contatti
Affiliati

  Da vedere
Hosting
Statistiche per siti
Corsi per webmaster
Hardware
Processori


  OnFocus
Meno codice più risultati con INSERT ... ON KEY DUPLICATE UPDATE

Un'icona per il sito: creare la favicon

Cenni di programmazione multi-threading - parte 4

  Siti Amici
Miki News
Giochi gratis
Areagratis
Baratto Online
AI Machines
Guide e Manuali Gratis
BLOO.it
Script e tutorial
Japgalaxy
Aziende di trasporto
Appunti universitari
Milan Calcio
Add to Technorati Favorites

Tutti i siti amici
Diventa Affiliato

 


Autore: Alessandro Coscia
Categoria: mysql
Livello: normale Livello normale

Meno codice più risultati con INSERT ... ON KEY DUPLICATE UPDATE

Due query in una, INSERT e se il record già esiste fa un UPDATE

Ispirato da un articolo di Kevin Burton e da "Mysql Performance Blog" vi parlo di una particolarità di MySql di cui ho sentito parlare poco sui blog italiani:
INSERT ... ON KEY DUPLICATE UPDATE

Cosa fa
(tradotto da mysql.org)
Se specifichi ON DUPLICATE KEY UPDATE e la riga che stai inserendo genera un indice duplicato fra chiavi UNIQUE o PRIMARY KEY viene eseguita una UPDATE sulla riga già presente.

Vantaggi
Ci permette di fare due query in una, di scrivere meno codice e performance migliori (performance test).

Nella PRATICA
Immaginiamo di dover loggare il passaggio dei nostri visitatori in una tabella e di doverne archiviare l'ip, il quale è una chiave.

Senza questa funzionalità di MySql dovremmo prima fare una SELECT per vedere se quell'ip esiste già, e solo in seguito decidere se fare un INSERT oppure un UPDATE (per esempio per tenere traccia della data dell'ultima visita o del numero di hits).

Soluzione
Anzichè fare due query al database sarà possibile eseguirne una sola.
Esempio:
INSERT INTO ipstats VALUES('192.168.0.1',1,NOW())
ON duplicate KEY UPDATE hits=hits+1last NOW();


In questo modo se l'ip non esiste viene inserito con numero di hits = 1 altrimenti viene incrementato il numero di hits e aggiornata la data di ultima visita.

LAST_INSERT_ID()
Se avete una chiave auto_increment ci sarà un inconveniente facilemente risolvibile, infatti...
SELECT LAST_INSERT_ID()

ha senso solo per gli INSERT ma non nel caso in cui venga eseguito l'UPDATE

Soluzione
E' sufficiente quindi aggiungere id=LAST_INSERT_ID(id) nell'UPDATE, dove id è ovviamente il nome della vostra colonna auto_increment.

Esempio da Mysql.org
INSERT INTO table (a,b,cVALUES (1,2,3)
ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), c=3;


Per ulteriori informazioni potete consultare il manuale ufficiale: INSERT ON DUPLICATE



Creare date casuali con MySql Precedente Indice Successivo Il mio timestamp MySql si aggiorna da solo, soluzioni
Creare date casuali con MySql Il mio timestamp MySql si aggiorna da solo, soluzioni