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.

Utilizzare il comando ALTER TABLE per:
  • 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

Sintassi per la modifica di una tabella:
ALTER TABLE <table> <action> [ORGANIZE ON {(<columns>) | NONE}]
Dove " <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> 
Dove " <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 ]
Dove " <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 ]
Dove " <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:

Tabella 1. ALTERARE TABELLA input
Immissione Descrizione
<table> Il nome della tabella da modificare.
<azione> L'azione da eseguire per la tabella specificata:
Aggiungi colonna
Aggiungere una colonna. Questo ingresso non può essere specificato in un blocco di transazioni.
Aggiungi<table_constraint>
Aggiungere un vincolo di tabella.
ALTER [COLONNA]
Modificare o eliminare il valore predefinito di una colonna.
ELIMINA [COLONNA]
Abbandonare una colonna. Tutti i vincoli che si basano sulla colonna eliminata vengono automaticamente eliminati. Questo ingresso non può essere specificato in un blocco di transazioni. Non è possibile eliminare una colonna di distribuzione, una colonna "organizza su" o l'ultima colonna rimanente in una tabella.

Se si elimina una colonna e si desidera riutilizzarne il nome, eseguire prima il comando GROOM TABLE <nometabella> VERSIONI; in caso contrario, potrebbero verificarsi errori.

VINCOLO DI CADUTA
Eliminare un vincolo.
Modifica colonna
Modificare la lunghezza di una colonna.
PROPRIETARIO A
Cambiare il proprietario della tabella.
RINOMINARE [COLONNA]
Rinominare una colonna.
Rinomina in
Rinominare la tabella.
IMPOSTARE I PRIVILEGI SU
Impostare i privilegi della tabella modificata su quelli di un'altra tabella.
<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:
Nessuna azione
Emette un errore se la chiave esterna è violata. Questo è il valore predefinito.
Limita
Lo stesso che non è un'azione.
A cascata
Elimina tutte le righe che fanno riferimento alla riga eliminata.
Imposta null
Imposta i valori delle colonne di riferimento al loro valore predefinito.
Imposta valore predefinito
Imposta i valori delle colonne di riferimento al loro valore predefinito.

Output

Il comando ALTER TABLE produce i seguenti risultati:

Tabella 2. ALTERARE TABELLA uscite
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

Di seguito sono riportati alcuni esempi di 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;