Dopo aver imparato a inserire i dati nel database, è importante sapere come modificarli. In MySQL, l'istruzione UPDATE ci permette di aggiornare i valori esistenti nelle tabelle, come cambiare l'email di un utente, modificare il prezzo di un prodotto o correggere informazioni errate.
Con Node.js possiamo eseguire query UPDATE per modificare una o più righe nel database, mantenendo i dati sempre aggiornati.
L'istruzione UPDATE modifica i dati esistenti in una tabella. La sintassi base prevede di specificare la tabella da modificare. Poi si indicano le colonne da aggiornare e le righe interessate tramite la clausola WHERE.
Ecco un esempio base per aggiornare l'email di un utente:
const mysql = require("mysql");
const con = mysql.createConnection({
host: "localhost",
user: "root",
password: "la_tua_password",
database: "esempio"
});
con.connect(function (err) {
if (err) throw err;
const sql = "UPDATE utenti SET email = '[email protected]' WHERE id = 1";
con.query(sql, function (err, result) {
if (err) throw err;
console.log("Righe aggiornate:", result.affectedRows);
});
});Nell'esempio, utilizziamo UPDATE utenti per indicare la tabella da modificare. Con SET email = '[email protected]' specifichiamo il nuovo valore per la colonna email. Infine, WHERE id = 1 identifica quale riga modificare: solo l'utente con id uguale a 1 verrà aggiornato.
La proprietà result.affectedRows indica quante righe sono state modificate dalla query. Se nessuna riga corrisponde alla condizione WHERE, il valore sarà 0.
Attenzione: se non specifichi la clausola WHERE, tutte le righe della tabella verranno aggiornate! Fai sempre attenzione a includere una condizione WHERE appropriata.
Possiamo aggiornare più colonne contemporaneamente separandole con una virgola dopo SET:
const sql = "UPDATE utenti SET nome = 'Giovanni', email = '[email protected]' WHERE id = 2";
con.query(sql, function (err, result) {
if (err) throw err;
console.log("Colonne aggiornate:", result.affectedRows);
});In questo caso, per l'utente con id uguale a 2, vengono modificati sia nome che email con una singola query.
Come per le query SELECT, è fondamentale usare parametri preparati quando i valori provengono dall'input dall'utente. Questo previene attacchi SQL injection e rende il codice più sicuro.
const nuovoNome = "Mario Rossi";
const nuovaEmail = "[email protected]";
const userId = 1;
const sql = "UPDATE utenti SET nome = ?, email = ? WHERE id = ?";
con.query(sql, [nuovoNome, nuovaEmail, userId], function (err, result) {
if (err) throw err;
console.log("Utente aggiornato:", result.affectedRows);
});Nell'esempio, i punti interrogativi ? vengono sostituiti nell'ordine dai valori nell'array [nuovoNome, nuovaEmail, userId]. MySQL gestisce automaticamente l'escape dei caratteri speciali, proteggendo il database da inserimenti dannosi.
La clausola WHERE può contenere condizioni complesse proprio come nelle query SELECT. Possiamo usare ad esempio operatori di confronto e logici per trovare con precisione quali righe modificare.
Possiamo aggiornare tutte le righe che soddisfano una certa condizione numerica:
// Aumenta del 10% il prezzo di tutti i prodotti sotto i 50 euro
const sql = "UPDATE prodotti SET prezzo = prezzo * 1.10 WHERE prezzo < 50";
con.query(sql, function (err, result) {
if (err) throw err;
console.log("Prodotti aggiornati:", result.affectedRows);
});Nell'esempio, prezzo = prezzo * 1.10 moltiplica il prezzo attuale per 1.10, aumentandolo del 10%. La condizione WHERE prezzo < 50 garantisce che solo i prodotti con prezzo inferiore a 50 euro vengano modificati.
Possiamo combinare più condizioni con gli operatori logici AND e OR per restituire risultati più precisi:
// Applica uno sconto ai prodotti elettronici costosi
const sql = "UPDATE prodotti SET sconto = 15 WHERE categoria = 'elettronica' AND prezzo > 100";
con.query(sql, function (err, result) {
if (err) throw err;
console.log("Prodotti scontati:", result.affectedRows);
});La clausola LIMIT restringe il numero di righe che vengono aggiornate. È utile quando vogliamo modificare solo un certo numero di righe, anche se soddisfano la condizione WHERE.
// Aggiorna solo i primi 10 utenti inattivi
const sql = "UPDATE utenti SET email_promozionale = TRUE WHERE attivo = FALSE LIMIT 10";
con.query(sql, function (err, result) {
if (err) throw err;
console.log("Record aggiornati:", result.affectedRows);
});