Torna all'elenco degli articoli Articoli
Tempo di lettura: 7 minuti

Che cos'è l'istruzione UPDATE in SQL?

L'istruzione SQL UPDATE viene utilizzata per aggiornare i dati esistenti nel database. Questo articolo ne illustra la sintassi e mostra esempi chiari dell'istruzione UPDATE in azione.

L'aggiornamento efficace dei dati esistenti in un database è necessario per chiunque utilizzi SQL; i dati sono utili solo se vengono mantenuti aggiornati e rilevanti.

In questo articolo esamineremo in dettaglio la sintassi dell'istruzione UPDATE. Poi ci immergeremo in esempi dettagliati, passo dopo passo, che illustreranno le regole, i potenziali usi e le limitazioni associate all'istruzione SQL UPDATE.

Che cos'è l'istruzione UPDATE?

In SQL, l'istruzione UPDATE viene utilizzata per modificare o aggiornare i record esistenti in una tabella. Si può utilizzare per aggiornare tutto in una volta, oppure si può specificare un sottoinsieme di record da modificare utilizzando la clausola WHERE.

L'istruzione UPDATE è considerata un comando di manipolazione dei dati SQL. Gli altri comandi sono INSERT e DELETE, che si possono conoscere nel corso Come INSERT, UPDATE o DELETE i dati in SQL da LearnSQL.it.

Vediamo la sintassi di SQL UPDATE.

Sintassi di SQL UPDATE

La sintassi dell'istruzione UPDATE è la seguente:

UPDATE <table>
SET <column1> = <value1>,
        <column2> = <value2>,
        …
[WHERE <conditions>]

Analizziamo la sintassi.

Il nome della tabella segue direttamente l'istruzione UPDATE: UPDATE <tabella>.

È possibile specificare le colonne che si desidera aggiornare utilizzando la parola chiave SET. Quando si impostano i valori delle colonne, è necessario utilizzare il tipo di dati corretto. Vediamo un esempio di query SQL che lo dimostra.

UPDATE employee
SET 	id = 1,
   	first_name = 'John'

Quando si imposta il valore della colonna id, non sono necessarie le virgolette. Quando invece si imposta la colonna first_name, è necessario inserire un valore stringa, cioè racchiudere il testo tra virgolette singole.

L'ultima parte della sintassi è l'inclusione facoltativa della clausola WHERE. Anche se facoltativa, di solito includo sempre la clausola . Sebbene sia facoltativa, di solito includo sempre WHERE nelle mie istruzioni UPDATE. Se non si include la clausola WHERE per specificare l'esatto record da modificare, si aggiornerà ogni singolo valore di quella colonna.

Vediamo un esempio che lo dimostra. Abbiamo due query quasi identiche, con la differenza che una utilizza WHERE e l'altra no:

Query 1 - Without WHEREQuery 2 - With WHERE
UPDATE employee
	SET first_name = 'John'
UPDATE employee
	SET first_name = 'John'
	WHERE id = 1

La query 1 aggiornerà il nome di ogni dipendente a John - probabilmente non si vuole che questo accada!

La query 2 aggiorna il nome di un dipendente a John: quello in cui id è uguale a 1. Probabilmente è questo l'obiettivo che si vuole raggiungere.

È buona norma utilizzare SELECT per visualizzare i record prima di procedere all'aggiornamento. Ad esempio, si può scrivere questa query:

SELECT *
FROM employee
WHERE id = 1

Se il record restituito è effettivamente quello che si desidera modificare, si può usare la stessa clausola WHERE per la dichiarazione UPDATE. In questo modo si evita di modificare accidentalmente altri record.

Questo conclude il nostro sguardo alla sintassi SQL UPDATE. Ora è il momento di esaminare alcuni esempi pratici che dimostreranno alcuni usi diversi dell'istruzione UPDATE. Verranno inoltre illustrati alcuni problemi di autorizzazione che potreste incontrare.

Permessi di SQL UPDATE

Prima del prossimo esempio, parliamo dei permessi. È importante notare che, a seconda del dialetto SQL utilizzato, potrebbe essere necessario modificare i permessi per poter modificare i record direttamente con l'istruzione UPDATE.

Ad esempio, in MySQL si può leggere il messaggio: "Si sta utilizzando la modalità di aggiornamento sicuro e si è tentato di aggiornare una tabella senza WHERE che utilizza una colonna KEY. Per disattivare la modalità sicura, disattivare l'opzione in Preferenze -> Editor SQL e riconnettersi".

Per risolvere il problema, si hanno due opzioni.

  1. Modificare le impostazioni:
    1. Andare in Modifica →
    2. Fare clic sulla scheda Editor SQL e deselezionare la casella di controllo Aggiornamenti sicuri.
    3. Fare clic su Query → Riconnetti al server.
    4. Eseguire la query SQL.
  2. Eseguire la seguente query:
    SET SQL_SAFE_UPDATES = 0;

Dopo aver completato una di queste opzioni, si dovrebbe essere in grado di utilizzare UPDATE per modificare i dati della tabella.

Uso di UPDATE sulle colonne

Immaginiamo di avere una tabella contenente i nomi e le età dei dipendenti di un'azienda. La tabella del database dovrebbe essere aggiornata automaticamente dal sistema HR collegato, ma esaminando la tabella si nota che alcune età non sono aggiornate. Si decide di utilizzare l'istruzione SQL UPDATE per aggiornare manualmente le età dei dipendenti interessati.

Prima di tutto, osserviamo la tabella employees tabella:

employee_idfirst_namelast_nameage
1JohnSmith23
2MaryConway54
3PaulJohnson33
4SandraCruz28
5JacobWard40
6StaceyTuite65
7ThomasRice43

Si può notare che ogni riga contiene un identificativo univoco per il dipendente, insieme ai dati first_name, last_name e age.

I dipendenti da aggiornare sono Paul Johnson e Jacob Ward.

Cominciamo ad aggiornare l'età di questi dipendenti:

UPDATE employees
SET age = 34
WHERE employee_id = 3;

Ok, questa query dovrebbe bastare. Il valore 3 di employee_id corrisponde a Paul Johnson. C'è una sola occorrenza di 3 nella colonna employee_id, quindi questa query non aggiornerà nessun altro record. Eseguire la query e utilizzare la seguente query SELECT per visualizzare i risultati:

SELECT employee_id, first_name, last_name, age
FROM employees
WHERE employee_id = 3;
employee_idfirst_namelast_nameage
3PaulJohnson34

L'età è stata aggiornata con successo!

Per il prossimo dipendente, aggiorniamo l'età utilizzando le colonne first_name e last_name nella clausola WHERE. Finché non ci sono due dipendenti con lo stesso nome e cognome, questo funzionerà come vogliamo:

UPDATE employees
SET age = 41
WHERE first_name = 'Jacob' AND last_name = 'Ward'

Questo dovrebbe bastare! Eseguite la query e utilizzate questa istruzione SELECT per visualizzare il risultato:

SELECT employee_id, first_name, last_name, age
FROM employees
WHERE first_name = 'Jacob' AND last_name = 'Ward'
employee_idfirst_namelast_nameage
5JacobWard41

È esattamente quello che volevamo! Per altri esempi come questo, consultate questo articolo su come usare le subquery con INSERT, UPDATE e DELETE.

Vediamo ora un esempio più avanzato: aggiorneremo una tabella utilizzando i dati di un'altra tabella.

Aggiornamento di una tabella con i dati di un'altra tabella

Immaginiamo uno scenario in cui qualcuno stia aggiornando i record della tabella e employees tabella e abbia commesso un errore! Per sbaglio ha impostato le prime 5 righe con il nome "John". La tabella employees tabella ha ora questo aspetto:

employee_idfirst_namelast_nameage
1JohnSmith23
2JohnConway54
3JohnJohnson33
4JohnCruz28
5JohnWard40
6StaceyTuite65
7ThomasRice43

Come possiamo risolvere il problema? Fortunatamente, abbiamo una tabella di backup che non è stata influenzata dall'errore dello sviluppatore. Questa tabella si chiama employees_backup e ha questo aspetto:

employee_idfirst_namelast_nameage
1JohnSmith23
2MaryConway54
3PaulJohnson34
4SandraCruz28
5JacobWard41
6StaceyTuite65
7ThomasRice43

Scriviamo una query che aggiorna i valori errati dei dipendenti con quelli corretti della tabella di backup. Quando si aggiornano più righe, di solito si fa molto lavoro manuale. Questa query è stata progettata per ridurre il lavoro ripetitivo:

SET first_name = (SELECT first_name
                  FROM employees_backup
                  WHERE employees_backup.last_name = employees.last_name)
WHERE employee_id < 6;

Vediamo come funziona. Si può notare che l'unica colonna che si vuole modificare è first_name, ma solo quando employee_id di quel record è inferiore a 6. Questo perché lo sviluppatore ha fatto un'operazione di aggiornamento che ha portato alla creazione di una tabella di backup. Questo perché l'errore dello sviluppatore ha riguardato solo i primi 5 record della tabella.

Selezioniamo quindi i valori dalla colonna first_name della tabella. employees_backup della tabella, facendo corrispondere i dipendenti al loro cognome. In questo modo ci assicuriamo che ogni dipendente abbia il nome corretto.

Questo è uno scenario utile da tenere a mente; qualcosa di simile può accadere quando si lavora con i database. Conoscere bene l'istruzione SQL UPDATE permette di correggere gli errori con facilità.

Ottenere un controllo completo sui dati con SQL UPDATE

Questo conclude il nostro articolo su SQL UPDATE. Abbiamo trattato la sintassi e i permessi necessari per utilizzare l'istruzione UPDATE. Abbiamo esaminato alcuni esempi pratici: casi semplici e scenari più avanzati, come l'utilizzo di dati da un'altra tabella.

Abbiamo anche detto che INSERT è uno dei modi per modificare i dati all'interno delle tabelle. Gli altri comandi che modificano i dati sono INSERT e DELETE. Per saperne di più, consultate questo post su INSERT, UPDATE e DELETE.