Spesso capita di avere nel nostro database una tabella di controllo: un esempio classico è lo stato
di un determinato record che assume valore 0
oppure 1
.
Per cambiare il valore di questo campo dovremmo conoscere come è valorizzato e modificarlo di conseguenza. In realtà possiamo semplificarci la vita con le funzionalità che MySQL
ci mette a disposizione.
Operatore bitwise OR esclusivo
Nel mio esempio, stato
è un campo INT
di 1 carattere ed è stato progettato per assumere il valore 0
oppure 1
. La query
è piuttosto semplice:
mysql > UPDATE mio_db SET stato = (stato ^ 1);
La query
appena eseguita cambierà tutti i record della tabella da 1 a 0 e da 0 a 1 in base al loro valore precedente.
Possiamo limitare l’azione ad un singolo record così:
mysql > UPDATE mio_db SET stato = (stato ^ 1) WHERE id = 1;
Uso delle condizioni
Un altro metodo è l’uso di CASE
. L’esempio si spiega da sé:
mysql > UPDATE mio_db SET stato = (CASE stato WHEN 1 THEN 0 ELSE 1 END);
In sostanza, cambia il valore a 0 se è 1, viceversa lo cambia ad 1 se è 0.
Anche in questo caso è possibile limitare la query di aggiornamento utilizzando WHERE
Una nota di Davide M.
È bene assicurarsi che il campo non possa assumere valore NULL
: nel caso la query non restituirà alcun valore.
Una nota personale: spero di non vedere più query di UPDATE
precedute da SELECT
e innestate in condizioni IF
del codice 🙂
Commenti recenti