Modificare i dati nelle tabelle
L'istruzione che ci permette di modificare una o più righe già presenti in una tabella è UPDATE
.
Sintassi di "UPDATE"
UPDATE <nome tabella> SET <(nomi colonne da modificare)> = <(valori di input)> WHERE <condizione>;
Vediamo qualche esempio. Modifichiamo il primo record inserito nella tabella impiegati.
SQL> UPDATE impiegati 2 SET Nominativo = 'Ludovici Pasquale' 3 WHERE ID_Impiegato = 1;
Con il precedente comando abbiamo modificato il contenuto della sola colonna Nominativo, sostituendolo con la stringa 'Ludovici Pasquale', esclusivamente per la riga di tabella la cui colonna ID_Impiegato è uguale a 1. Proviamo a modificare più colonne con una sola istruzione.
SQL> UPDATE impiegati 2 SET Data_Assunz = TO_DATE ('01-Mar-2006', 'DD-MON-YYYY'), 3 Paese_Residenza = 'Albano';
Abbiamo aggiornato contemporaneamente le colonne Data_Assunz
e Paese_Residenza
per tutti i record presenti nella tabella impiegati. L'assenza della clausola WHERE
nell'istruzione UPDATE
, diversamente dal precedente esempio, ci assicura che le modifiche vengono apportate a tutte le righe presenti in tabella. Nel caso dovessimo modificare più colonne con una stessa istruzione UPDATE
, così come abbiamo appena fatto, allora dobbiamo opportunamente separare i nomi di colonna mediante l'uso delle virgole.
Possiamo anche modificare il contenuto di tabelle che non sono in nostro possesso, ma è necessario che il proprietario delle stesse (o il DBA) ci dia l'autorizzazione a farlo concedendoci l'apposito privilegio.
Transazioni, COMMIT E ROLLBACK
Dopo ogni modifica apportata ai dati di una tabella mediante il comando UPDATE
è buona regola far seguire il comando COMMIT
, che effettua la scrittura immediata delle operazioni di modifica nei corrispondenti datafile del database.
Questa operazione fornisce, in tempo reale, le modifiche apportate anche agli altri utenti eventualmente collegati allo stesso database che, in caso contrario, avrebbero una visione non aggiornata delle tabelle.
Al contrario, se modificassimo erroneamente il contenuto di una tabella possiamo sempre recuperare la situazione precedente alle modifiche con l'istruzione ROLLBACK
, purché l'operazione di UPDATE non sia stata seguita dalla COMMIT
. ROLLBACK
annulla le modifiche effettuate alle tabelle del database, esclusivamente per l'utente da cui parte questo comando, fino all'ultima COMMIT
eseguita. Sia COMMIT
sia ROLLBACK
sono sempre seguite dal punto e virgola (;). È chiamata transazione l'insieme di istruzioni di modifica dati che avvengono fra due COMMIT
.
Cancellare righe in una tabella
Il comando DELETE
consente di rimuovere una o più righe da una tabella
Sintassi di "DELETE"
DELETE FROM <nome tabella> WHERE <condizione>;
La clausola WHERE
è opzionale e indica, mediante la condizione imposta, l'insieme delle righe da cancellare. In mancanza di questa tutte le righe della tabella riferita verrebbero cancellate. Facciamo qualche esempio cancellando inizialmente la riga della tabella contatti avente colonna "IDContatto" uguale a 3.
SQL> DELETE FROM contatti WHERE IDContatto = 3;
Se volessimo invece cancellare tutte le righe presenti in tabella scriveremmo
SQL> DELETE FROM contatti;
Anche per il comando UPDATE
vale ciò che abbiamo precedentemente detto in riferimento alle istruzioni COMMIT
e ROLLBACK
.
Il comando TRUNCATE
Nel precedente esempio abbiamo visto come cancellare tutte le righe di una tabella col comando DELETE
. Il comando, TRUNCATE
ha lo stesso scopo ma si differenzia da DELETE
per alcune caratteristiche importanti.
Anzitutto TRUNCATE
è un comando DDL, contrariamente a DELETE
che è DML.
Nota: dopo ogni comando di tipo DDL (CREATE TABLE
, DROP TABLE
, etc.) Oracle esegue sempre una COMMIT automatica, pertanto non è più possibile annullare le modifiche.
Altra importante differenza è che il comando TRUNCATE
non genera informazioni per il ripristino dei dati eliminati (contrariamente al comando DELETE
che permette il ROLLBACK
), quindi la sua esecuzione è molto più veloce su tabelle piccole e grandi.
Sintassi di "TRUNCATE"
TRUNCATE TABLE <tabella>;
Nota: Il comando TRUNCATE
elimina tutte le righe presenti in tabella, non la tabella dal database.