venerdì 9 marzo 2018

MYSQL: come fare insert o update in un colpo solo

Quante volte in mysql ti è capitato di dover fare delle query di aggiornamento dati non sapendo se un record era già presente in una tabella oppure no?
Ecco, in questi casi solitamente ci tocca fare una bella select, e poi a seconda del risultato trovato, fare una insert o un update.

Grazie alla sintassi che ti sto per spiegare invece, è possibile fare quello che io definirei un insert update mysql in un colpo solo, ovvero verificare con un metodo alternativo la presenza di un record in una tabella, ed agire di conseguenza... il tutto in una singola query!


Come fare insert o update in un colpo solo in MYSQL


Bando alle ciance, la sintassi da utilizzare per fare una insertupdate mysql, è la seguente:

INSERT INTO tabella (campo1,campo2) VALUES ('campo1','campo2') ON DUPLICATE KEY UPDATE nome='nome', cognome='nome';

Con questa semplice riga di codice sql infatti, se in una tabella si tenta di fare un inserimento dati, se questo fallisce perchè il record esiste già, viene fatto automaticamente un aggiornamento dati.
Ovviamente bisogna quantomeno riscrivere tutti i campi da inserire/aggiornare due volte, dato che bisogna comporre comunque sia la sintassi dell'insert che della update mysql... ma questo mi sembra proprio il minor dei mali, dato che ci siamo risparmiati una select che avrebbe magari anche rallentato l'eseguzione dello script.

La domanda però ora sorge spontanea... come si fa a capire se un record è già presente in una tabella?
Semplice, con le chiavi univoce!
Bisogna infatti prima creare una chiave univoca, o indicare un campo come univoco, e poi provare l'inserimento, altrimenti verrà effettuata sempre e solo l'insert.

Se non sai come creare chiavi univoce in mysql leggi questo post.
Quello che dovrai fare è, ad esempio, creare una chiave nome+cognome per impedire l'inserimento di omonimi, e gestire l'aggiornamento in tal senso.
Se poi vuoi fare una cosa ancora più pulita, definisci come indice univoco un id della tabella, in modo tale da aggiornare la riga solo quando si sta provando realmente ad inserire un duplicato.

Bene, adesso sai come fare insert update mysql in un colpo solo.
Come al solito, a grandi poteri corrispondono grandi responsabilità (cit.).

Lascia un commento!