logo logo Dove iniziare Linguaggi Aiuto Blog
Home Dove iniziare Linguaggi Aiuto e Supporto Biadets Blog

Aggiornare i dati in MySQL

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.

La query UPDATE

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.

Aggiornare più colonne

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.

Usare parametri nelle query UPDATE

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.

Aggiornare con condizioni

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.

Aggiornare con operatori di confronto

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.

Aggiornare con AND e OR

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);
});

Aggiornare con LIMIT

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);
});

Prova!Completa gli spazi vuoti con il testo appropriato.
// Aggiorna l'email di un utente
const sql = " utenti email = '[email protected]' WHERE id = 1";

Prova!Scegli l'opzione corretta tra quelle elencate.
// Cosa succede se non usi WHERE in una query UPDATE?
UPDATE prodotti SET prezzo = 100;