Per stampare: Clicca qui oppure seleziona File » Stampa nel menù del tuo browser.

        -----------------------------------------------------------------------------------------------
        Questo intervento è stato stampato da Guide di Dada.Net
        raggiungibile a http://guide.dada.net
        -----------------------------------------------------------------------------------------------

By Database di Andrea Silvestri
URL: http://guide.dada.net/database/interventi/2001/05/45041.shtml

Database di Andrea Silvestri guida dal 29-12-2000

Istruzione UPDATE.

Analizziamo l'istruzione UPDATE, che permette di modificare uno o piu' record presenti in una tavola.

L'istruzione UPDATE consente di modificare valori relativi ai record presenti in una tabella, permettendo di decidere quali colonne variare e per quali record.
La sintassi dell'istruzione e':

UPDATE tabella
SET col1 = valore1, col2 = valore2.....
WHERE .........

Quindi tramite la SET si specificano i nuovi valori per le colonne da modificare, con la WHERE si scelgono i record da trasformare. In mancanza di una where verrebbero modificati tutti i record della tavola.
Ad esempio supponiamo di voler modificare un record della tabella sedi , in particolare di cambiare la citta' della sede relativa alla ricerca, da 'ROMA' a 'TORINO'. La colonna da modificare e' la citta', quindi dovremo scrivere:

SET citta = 'TORINO'

Dobbiamo pero' specificare quale record modificare, inserendo nella where una condizione che permetta di indicare solo quel particolare record. Nel nostro caso possiamo usare sia il codice che e' 20 che il nome che e' 'RICERCA'; conviene utilizzare il primo, in quanto su di esso e' definita una primary key e quindi in questo modo siamo certi di modificare un solo record. L'istruzione completa e':

UPDATE sedi
set citta = 'TORINO'
where codice = 20;

In questo modo la nuova tabella sedi sara':

ID NOME CITTA
10 DIREZIONE MILANO
20 RICERCA TORINO
30 SVILUPPO ROMA

Se avessimo voluto modificare contemporaneamente sia la citta' che il nome avremmo scritto:

UPDATE sedi
set citta = 'TORINO', nome='SVILUPPO'
where codice = 20;

Come per la insert vanno rispettati tutti i constraint e le dimensioni e i tipi dei campi. Quindi non e' possibile modificare un numero e sostituirlo con una stringa, annullare il valore di una colonna not null ecc.
E' possibile modificare uno o piu' record andando a prendere il valore da un'altra tabella o dalla stessa, ad esempio supponiamo di voler spostare MARIO BIANCHI nella stessa sede di PAOLO VERDI.
Potremmo andare a leggere, con una select, dalla tabella impiegati la sede del sig. VERDI e successivamente, con una update modificare la sede del sig. BIANCHI, oppure fare tutto con una sola istruzione:

UPDATE impiegati
set sede = (SELECT sede FROM impiegati WHERE nome = 'PAOLO' AND cognome='VERDI')
WHERE nome = 'MARIO' AND cognome ='BIANCHI';

E' possibile modificare anche piu' colonne contemporaneamente andandole a leggere da una tabella, ad esempio volendo assegnare anche lo stesso stipendio:

UPDATE impiegati
set (sede,salario) =
(SELECT sede,salario FROM impiegati WHERE nome = 'PAOLO' AND cognome='VERDI')
WHERE nome = 'MARIO' AND cognome ='BIANCHI';

E' ovviamente importante l'ordine con cui si estraggono le colonne, in quanto il primo valore estratto sara' inserito nella prima colonna indicata nella set.
E' possibile anche annullare uno o piu' campi di un record, ed e' l'unico caso in cui si usa il segno '=' con il NULL. Supponiamo, ad esempio di voler annullare il salario di tutti i dipendenti (sempre che non sia stato definito come campo not null):

UPDATE impiegati
SET salario = NULL;

Senza la condizione di where vengono modificati tutti i record.
Per quanto riguarda la update abbiamo terminato, in quanto anche questa istruzione ha una sintassi relativamente semplice.