ALTER TABLE
Usare il comando ALTER TABLE per modificare la struttura di una tabella esistente. Se la tabella è utilizzata da una query attiva, il comando ALTER attende il completamento della query.
- Modificare o eliminare una colonna predefinita. Le impostazioni predefinite si applicano solo ai comandi INSERT successivi, non alle righe già presenti nella tabella.
- Rinominare una colonna o una tabella senza modificare il tipo di dati o le dimensioni della colonna o della tabella. È possibile omettere la colonna delle parole chiave.
- Aggiungere o eliminare un vincolo di tabella o di colonna. Non è possibile modificare un vincolo. È necessario invece eliminare il vincolo e crearne uno nuovo.
- Modifica la lunghezza di una colonna varchar.
Se una tabella è referenziata da una stored procedure, non è consentito aggiungere o eliminare una colonna. È necessario eliminare la stored procedure prima di eseguire il comando ALTER TABLE e ricreare la stored procedure dopo la modifica della tabella.
Sintassi
ALTER TABLE <table> <action> [ORGANIZE ON {(<columns>) | NONE}]<action> può essere uno dei seguenti:ADD COLUMN <col> <type> [<col_constraint>][,…] |
ADD <table_constraint> |
ALTER [COLUMN] <col> { SET DEFAULT <value> | DROP DEFAULT } |
DROP [COLUMN] column_name[,column_name…] {CASCADE | RESTRICT } |
DROP CONSTRAINT <constraint_name> {CASCADE | RESTRICT} |
MODIFY COLUMN (<col> VARCHAR(<maxsize>)) |
OWNER TO <user_name> |
RENAME [COLUMN] <col> TO <new_col_name> |
RENAME TO <new_table> |
SET PRIVILEGES TO <table>
<col_constraint> rappresenta:[ CONSTRAINT <constraint_name> ]
{NOT NULL | NULL | UNIQUE | PRIMARY KEY | DEFAULT <value> | <ref>}
[ [ [ NOT ] DEFERRABLE ] { INITIALLY DEFERRED | INITIALLY IMMEDIATE } |
[ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] [ NOT ] DEFERRABLE ]<table_constraint> rappresenta:[ CONSTRAINT <constraint_name> ]
{UNIQUE (<col>[,<col>…] ) |
PRIMARY KEY (<pkcol_name>[,<pkcol_name>…] ) |
FOREIGN KEY (<fkcol_name>[,<fkcol_name>…] ) <ref>}
[ [ [ NOT ] DEFERRABLE ] { INITIALLY DEFERRED | INITIALLY IMMEDIATE } |
[ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] [ NOT ] DEFERRABLE ]<ref> rappresenta:REFERENCES <reftable> [ (<refcol_name>[,<refcol_name>…] ) ]
[ MATCH FULL ]
[ ON UPDATE {CASCADE | RESTRICT | SET NULL | SET DEFAULT | NO ACTION} ]
[ ON DELETE {CASCADE | RESTRICT | SET NULL | SET DEFAULT | NO ACTION} ]Input
Il comando ALTER TABLE riceve i seguenti input:
| Immissione | Descrizione |
|---|---|
| <table> | Il nome della tabella da modificare. |
| <azione> | L'azione da eseguire per la tabella specificata:
|
| <col> | Il nome di una colonna. |
| <nome_utente> | Il nome di un utente. |
| <nuovo_nome_colonna> | Il nuovo nome da assegnare alla colonna. |
| <nuova_tabella> | Il nuovo nome della tabella. |
| Organizza in | Su quali colonne (da una a quattro) deve essere organizzata la tabella. Non può essere specificato per le tabelle esterne. Se si specificano le colonne, la tabella non può avere viste materializzate e tutti i tipi di dati delle colonne specificate devono essere applicabili a livello di zona. La riorganizzazione dei dati della tabella ha effetto quando viene eseguito GROOM TABLE. Per ulteriori informazioni, vedere "Utilizzo di tabelle di base raggruppate" in IBM® Netezza® System Administrator's Guide. |
| <nome_vincolo> | Il nome da assegnare a un vincolo di colonna o a un vincolo di tabella. Se non si specifica un nome, il sistema ne genera uno. |
| NON DIFFERIBILE | DIFFERIBILE | Controlla se il vincolo può essere rinviato alla fine della transazione. NON DEFERIBILE è l'impostazione predefinita. Netezza Performance Server non supporta il controllo dei vincoli e l'integrità referenziale) |
| INITIALLY | Specifica DEFERRED (alla fine della transazione) o IMMEDIATE (alla fine di ogni estratto conto). |
| NON NULLO | NULLO | Se la colonna può contenere valori nulli. NULL è l'impostazione predefinita. |
| UNIQUE (vincolo di colonna e di tabella) | Se ogni valore della colonna deve essere unico. |
| PRIMARY KEY (vincolo di colonna e di tabella) | Se le colonne specificate devono costituire la chiave primaria della tabella. Questo vincolo è essenzialmente una combinazione dei vincoli UNIQUE e NOT NULL, ma l'identificazione di un insieme di colonne come chiave primaria fornisce anche metadati sulla progettazione dello schema. Una chiave primaria implica che altre tabelle possano fare affidamento su questo insieme di colonne come identificatore univoco delle righe. È possibile specificare un solo vincolo di chiave primaria per una tabella, sia come vincolo di colonna che come vincolo di tabella. L'insieme delle colonne che compongono la chiave primaria deve essere diverso da qualsiasi altro insieme di colonne nominato da qualsiasi vincolo univoco definito per la tabella. |
| DEFAULT (vincolo di colonna) | Il valore predefinito da inserire in ogni riga per questa colonna. |
| REFERENCES (vincolo di colonna) | Le colonne specificate della nuova tabella devono contenere solo valori che corrispondono ai valori delle colonne specificate della tabella specificata. |
| FOREIGN KEY e REFERENCES tabella (vincolo di tabella) | Le colonne specificate della nuova tabella devono contenere solo valori che corrispondono ai valori delle colonne specificate della tabella specificata. Se non si specifica una colonna, il valore deve corrispondere alla chiave primaria della tabella. Le colonne specificate della tabella di riferimento devono avere un vincolo di chiave unica o primaria in quella tabella. |
| PARTITA COMPLETA | MATCH FULL impedisce che una colonna di una chiave esterna multicolonna sia nulla se le altre parti della chiave esterna non sono nulle. Questo è il valore predefinito. MATCH PARTIAL non è supportato. |
| SU AGGIORNAMENTO | SU CANCELLAZIONE | L'azione da eseguire quando la tabella o le colonne specificate vengono aggiornate o eliminate:
|
Output
Il comando ALTER TABLE produce i seguenti risultati:
| Emissione | Descrizione |
|---|---|
| ALTER | Il comando è stato eseguito correttamente. |
| ERROR | La tabella o la colonna specificata non è disponibile. |
Privilegi
È necessario essere l'utente admin, il proprietario della tabella, il proprietario del database o dello schema in cui è definita la tabella, oppure l'account deve avere il privilegio Alter per la tabella o per la classe di oggetti Table. Se si cambia il proprietario della tabella, è necessario avere l'accesso List all'account utente.
Utilizzo
- Eliminare il valore predefinito dalla colonna a:
MYDB.SCH1(USER)=> ALTER TABLE distributors ALTER COLUMN address DROP DEFAULT; - Modifica la lunghezza della varchar di una colonna:
MYDB.SCH1(USER)=> ALTER TABLE t3 MODIFY COLUMN (col1 VARCHAR(6)); - Modificare il nome di una colonna:
MYDB.SCH1(USER)=> ALTER TABLE distributors RENAME COLUMN address TO city; - Modificare il nome di una tabella:
MYDB.SCH1(USER)=> ALTER TABLE distributors RENAME TO suppliers; - Cambiare il proprietario della tabella:
MYDB.SCH1(USER)=> ALTER TABLE distributors OWNER TO carmen; - Cambiare i privilegi con quelli impostati per un'altra tabella:
MYDB.SCH1(USER)=> ALTER TABLE distributors SET PRIVILEGES TO suppliers; - Aggiungere un vincolo:
MYDB.SCH1(USER)=> ALTER TABLE distributors ADD CONSTRAINT empkey PRIMARY KEY(col1) INITIALLY IMMEDIATE; - Eliminare un vincolo:
MYDB.SCH1(USER)=> ALTER TABLE distributors DROP CONSTRAINT empkey CASCADE;