Tempo di lettura: < 1 minuto

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 🙂