economia news e media viaggi informatica internet salute e benessere int rattenimento e spettacolo sport tempo libero istruzio ne e formazione arte cultura scienza

SQL

Creazione di tabelle. Sesta parte (ALTER TABLE)

A cura di Andrea Silvestri

Pubblicato il 08/04/2001

In questo secondo ed ultimo intervento sulla ALTER TABLE, vedremo come utilizzarla per aggiungere/eliminare constraint ad una tabella o per modificarne lo stato.

Per aggiungere un nuovo vincolo ad una tabella si utilizza la clausola ADD :

ALTER TABLE impiegati
ADD CONSTRAINT ck_imp_sesso CHECK (sesso in ('M','F'));

Quindi e' possibile aggiungere un qualsiasi constraint che non sia stato gia' definito in fase di creazione della tabella.
Con la MODIFY e' possibile solo trasformare una colonna null in not null e viceversa (in questo caso, a patto che tutta la colonna sia valorizzata).
Per eliminare un vincolo si utilizza la clausola DROP :

ALTER TABLE impiegati
DROP CONSTRAINT ck_imp_sesso;

Dato che una tabella puo' avere una sola primary key, la si puo' eliminare nel seguente modo:

ALTER TABLE impiegati
DROP primary key;

Un constraint di questo tipo puo' essere eliminato solo se non esistono foreign key che lo referenziano a meno di specificare la clausola CASCADE:

ALTER TABLE impiegati
DROP primary key CASCADE;

In questo modo vengono eliminate anche tutte le foreign key che referenziano la chiave primaria.
Quando parlo di eliminare mi riferisco sempre ai vincoli e non ai dati, che restano intatti.
Le ultime due clausole sono la DISABLE e la ENABLE , che permettono di disabilitare e riabilitare un constraint.
Ad esempio:

ALTER TABLE impiegati
DISABLE CONSTRAINT ck_imp_sesso;

A questo punto e' possibile inserire qualsiasi lettera nella colonna sesso.
E per riabilitarlo:

ALTER TABLE impiegati
ENABLE CONSTRAINT ck_imp_sesso;

Questa istruzione va a buon fine solo se tutti i record soddisfano il vincolo che si sta abilitando.
La disabilitazione di un constraint quindi non serve a permettere l'inserimento di record non coerenti con il constraint ma per velocizzare l'inserimento di grosse moli di dati.
Nel caso della primary key e' possibile utilizzare la clausola CASCADE, per disabilitare in cascata tutte le foreign che la referenziano:

ALTER TABLE impiegati
DISABLE primary key CASCADE;

I link correlati all'argomento

Vuoi essere aggiornato sulle novità della guida?

Feed RSS XML vostro feed RSS