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