Nel corso della precedente lezione si e' visto come modificare i dati gia' presenti nel database. A volte pero' non e' sufficiente modificare i dati, ma occorre aggiornare la struttura stessa del database per far si' che possano essere rappresentate nuove informazioni. Dal momento che la struttura del detabase e' data sostanzialmente dall'insieme delle tabelle che lo compongono, il suo aggiornamento corrisponde all'eliminazione di tabelle o alla modifica delle loro caratteristiche.
Per eliminare una tabella da un database il comando SQL da utilizzare e' DROP table:
DROP table nome_tabella { REStrICT | CASCADE }
nome_tabella e' il nome della tabella che deve essere eliminata.
Se si specifica la clausola CASCADE vengono automaticamente eliminati i vincoli di integrita' e le viste (view) in cui la tabella e' coinvolta. Viceversa, se si specifica la clausola REStrICT ed esistono dei vincoli di integrita' o delle viste che si riferiscono alla tabella, l'operazione fallisce.
Ad esempio, si siano definite le seguenti due tabelle:
CREATE table Prova1 (
Id INTEGER PRIMARY KEY,
Nome VARCHAR(50))
CREATE table Prova2 (
Id INTEGER PRIMARY KEY,
Nome VARCHAR(50),
toProva1 INTEGER REFERENCES Prova1(Id))
Volendo eliminare la tabella Prova1, l'istruzione:
DROP table Prova1 REStrICT
f
allira' dal momento che esiste un vincolo di integrita' che lega una chiave esterna della tabella Prova2 con la tabella Prova1.
Invece l'istruzione:
DROP table Prova1 CASCADE
verra' eseguita con successo e produrra' anche l'eliminazione del vincolo di integrita' referenziale presente sulla tabella Prova2.
Nel caso in cui si voglia modificare una tabella esistente nel database, l'istruzione da utilizzare e' ALTER table. Dal momento che la sintassi di questa istruzione e' piuttosto complessa, essa verra' spiegata scomponendola in base alle funzionalita' che si vogliono ottenere:
Aggiunta di una nuova colonna nella tabella
ALTER table nome_tabella ADD [ COLUMN ] definizione_colonna
nome_tabella e' il nome della tabella che si vuole modificare.
La definizione della colonna segue la stessa sintassi vista nella lezione "Creare il database" nella spiegazione dell'istruzione CREATE table. Dovranno quindi essere specificati il nome della colonna, il suo tipo ed eventualmente il suo valore di default e i vincoli imposti sulla colonna.
La parola chiave COLUMN puo' essere omessa (qui e in tutti i casi successivi).
Eliminazione di una colonna dalla tabella
ALTER table nome_tabella
DROP [ COLUMN ] nome_colonna { REStrICT | CASCADE }
nome_colonna e' il nome della colonna che si vuole eliminare. Le clausole RESStrIC e CASCADE si comportano esattamente come nell'istruzione DROP table vista precedentemente.
L'istruzione fallira', oltre che nei casi gia' visti per REStrICT, se si tenta di eliminare una colonna che e' l'unica colonna di una tabella.
Modifica del valore di default di una colonna
ALTER table nome_tabella
ALTER [ COLUMN ] nome_colonna { SET clausola_default | DROP DEFAULT }
La sintassi ed il significato della clausola che definisce il nuovo valore di default sono identici a quelli della clausola_default che si usa nel comando CREATE table.
Eliminazione di un vincolo della tabella
ALTER table nome_tabella
DROP CONStrAINT nome_vincolo { REStrICT | CASCADE }
Elimina il vincolo identificato dal nome specificato. L'operazione fallisce se e' stata specificata la clausola REStrICT ed esistono altri vincoli che dipendono da quello che si intende eliminare. Specificando la clausola CASCADE l'operazione verra' sempre completata con successo, cancellando inoltre i vincoli dipendenti da quello eliminato.
Spesso si vuole eliminare un vincolo a cui non e' stato assegnato un nome esplicitamente, facendo precedere la definizione del vincolo dalla clausola opzionale [CONStrAINT nome_vincolo]. In tal caso, dal momento che il DBMS avra' comunque assegnato un nome al vincolo per poterlo identificare, occorrera' interrogare le tabelle di sistema del DBMS ed ottenere da esse il suo nome. La particolare interrogazione richiesta dipende dallo specifico DBMS utilizzato.
Aggiunta di un vincolo alla tabella
ALTER table nome_colonna
ADD vincolo_di_tabella
La sintassi da utilizzare per la definizione del vincolo e' la stessa utilizzata nel comando CREATE table per i vincoli di tabella.