View a markdown version of this page

ALTER TABLE - Amazon Aurora DSQL

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

ALTER TABLE

ALTER TABLE modifica la definizione di una tabella.

Sintassi supportata

ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ] action [, ... ] ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ] RENAME [ COLUMN ] column_name TO new_column_name ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ] RENAME CONSTRAINT constraint_name TO new_constraint_name ALTER TABLE [ IF EXISTS ] name RENAME TO new_name ALTER TABLE [ IF EXISTS ] name SET SCHEMA new_schema ALTER TABLE ASYNC [ IF EXISTS ] [ ONLY ] name [ * ] VALIDATE CONSTRAINT constraint_name where action is one of: ADD [ COLUMN ] [ IF NOT EXISTS ] column_name data_type [ STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT } ] DROP [ COLUMN ] [ IF EXISTS ] column_name [ RESTRICT | CASCADE ] ALTER [ COLUMN ] column_name SET DEFAULT expression ALTER [ COLUMN ] column_name DROP DEFAULT ALTER [ COLUMN ] column_name DROP NOT NULL ALTER [ COLUMN ] column_name DROP EXPRESSION [ IF EXISTS ] ALTER [ COLUMN ] column_name ADD GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY [ ( sequence_options ) ] ALTER [ COLUMN ] column_name { SET GENERATED { ALWAYS | BY DEFAULT } | SET sequence_option | RESTART [ [ WITH ] restart ] } [...] ALTER [ COLUMN ] column_name DROP IDENTITY [ IF EXISTS ] ALTER [ COLUMN ] column_name SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT } ADD table_constraint NOT VALID ADD table_constraint_using_index DROP CONSTRAINT [ IF EXISTS ] constraint_name [ RESTRICT | CASCADE ] OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER } and table_constraint is: [ CONSTRAINT constraint_name ] CHECK ( expression ) and table_constraint_using_index is: [ CONSTRAINT constraint_name ] UNIQUE USING INDEX index_name

Description

ADD [ COLUMN ] [ IF NOT EXISTS ]

Questo modulo aggiunge una nuova colonna alla tabella, utilizzando la stessa sintassi diCREATE TABLE. Se IF NOT EXISTS è specificato ed esiste già una colonna con questo nome, non viene generato alcun errore.

DROP [ COLUMN ] [ IF EXISTS ]

Questo modulo elimina una colonna da una tabella. Gli indici e i vincoli di tabella che coinvolgono la colonna verranno eliminati automaticamente ad eccezione dei vincoli di chiave primaria. L'eliminazione delle colonne della chiave primaria non è supportata. Le statistiche multivariate che fanno riferimento alla colonna eliminata verranno rimosse anche se la rimozione della colonna causasse che le statistiche contengano dati per una sola colonna. Dovrai indicare CASCADE se qualcosa al di fuori della tabella dipende dalla colonna, ad esempio riferimenti o viste a chiavi esterne. Se IF EXISTS è specificato e la colonna non esiste, non viene generato alcun errore. In questo caso viene invece emesso un avviso.

SET/DROP DEFAULT

Questi moduli impostano o rimuovono il valore predefinito per una colonna (dove la rimozione equivale a impostare il valore predefinito su NULL). Il nuovo valore predefinito verrà applicato solo ai UPDATE comandi successivi INSERT e non modifica le righe già presenti nella tabella.

DROP NOT NULL

Questo modulo modifica una colonna per consentire valori nulli.

DROP EXPRESSION [ IF EXISTS ]

Questo modulo trasforma una colonna generata memorizzata in una normale colonna di base. I dati esistenti nelle colonne vengono mantenuti, ma le modifiche future non applicheranno più l'espressione di generazione. Se DROP EXPRESSION IF EXISTS è specificato e la colonna non è una colonna generata, non viene generato alcun errore. In questo caso viene invece emesso un avviso.

ADD GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY
SET GENERATED { ALWAYS | BY DEFAULT }
DROP IDENTITY [ IF EXISTS ]

Questi moduli cambiano se una colonna è una colonna di identità o modificano l'attributo di generazione di una colonna di identità esistente. Per informazioni dettagliate, vedi CREATE TABLE. Ad esempioSET DEFAULT, questi moduli influiscono solo sul comportamento dei UPDATE comandi successivi INSERT e non modificano le righe già presenti nella tabella.

sequence_optionÈ un'opzione supportata da ALTER SEQUENCEINCREMENT BY. Questi moduli alterano la sequenza che sta alla base di una colonna di identità esistente.

Nota

Amazon Aurora DSQL richiede un valore esplicito CACHE durante l'utilizzo. ADD GENERATED AS IDENTITY Inoltre, le colonne di identità sono supportate solo sulle colonne. bigint

Quando si utilizzano le colonne di identità, il valore della cache deve essere considerato attentamente. Per ulteriori informazioni, consulta il callout Importante sulla CREATE SEQUENCE pagina.

Per indicazioni su come utilizzare al meglio le colonne di identità in base ai modelli di carico di lavoro, consulta. Utilizzo di sequenze e colonne di identità

SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT }

Questo modulo imposta la modalità di archiviazione per una colonna. Per i dettagli sulle modalità di archiviazione disponibili, vedere nella Modalità di archiviazione CREATE TABLE pagina.

ADD table_constraint NOT VALID

Questo modulo aggiunge un nuovo CHECK vincolo a una tabella. In Aurora DSQL, i CHECK vincoli aggiunti tramite ALTER TABLE ADD CONSTRAINT devono utilizzare l'opzione. NOT VALID Aurora DSQL crea il vincolo ma non lo convalida immediatamente rispetto ai dati esistenti. Ciò consente di aggiungere il vincolo senza scansionare l'intera tabella. Il vincolo si applica immediatamente a tutte le nuove righe e gli aggiornamenti.

Dopo aver aggiunto un vincolo conNOT VALID, utilizzalo ALTER TABLE ASYNC ... VALIDATE CONSTRAINT per convalidare che anche i dati esistenti soddisfino il vincolo. La convalida viene eseguita come processo DDL asincrono. È possibile monitorarne l'avanzamento utilizzando. sys.jobs

ADD table_constraint_using_index

Questo modulo aggiunge un nuovo UNIQUE vincolo a una tabella in base a un indice univoco esistente. Tutte le colonne dell'indice verranno incluse nel vincolo.

L'indice deve essere in VALID uno stato; l'aggiunta di un vincolo univoco utilizzando un indice mentre l'indice è attualmente in fase di creazione non è supportata.

Se viene fornito un nome di vincolo, l'indice verrà rinominato in modo che corrisponda al nome del vincolo. Altrimenti il vincolo avrà lo stesso nome dell'indice.

Dopo l'esecuzione di questo comando, l'indice è «posseduto» dal vincolo, come se l'indice fosse stato creato da un comando normaleCREATE UNIQUE INDEX ASYNC. In particolare, l'eliminazione del vincolo farà scomparire anche l'indice.

VALIDATE CONSTRAINT

Questo modulo convalida un vincolo creato in precedenza con l'opzione. NOT VALID Questo comando è un’operazione DDL asincrona che non blocca altre transazioni. Quando si esegue il comando ALTER TABLE ASYNC ... VALIDATE CONSTRAINT, Aurora DSQL restituisce immediatamente un job_id.

È possibile monitorare lo stato di questo processo asincrono utilizzando la vista di sistema sys.jobs. È inoltre possibile utilizzare sys.wait_for_job('job_id') per bloccare la sessione corrente fino al completamento o all'esito negativo della convalida.

Il processo di convalida analizza l'intera tabella per verificare che tutte le righe esistenti soddisfino il vincolo. Una volta completata con successo la convalida, Aurora DSQL contrassegna il vincolo come valido e il pianificatore di query lo applica a tutte le query. Se la convalida fallisce perché le righe esistenti violano il vincolo, il processo fallisce e il vincolo rimane nello stato. NOT VALID

Questo comando convalida solo i vincoli creati con l'opzione. NOT VALID Il tentativo di convalida di un vincolo già valido genera un errore.

DROP CONSTRAINT [ IF EXISTS ]

Questo modulo elimina il vincolo specificato su una tabella, insieme a qualsiasi indice sottostante il vincolo. Se IF EXISTS è specificato e il vincolo non esiste, non viene generato alcun errore. In questo caso viene invece emesso un avviso.

OWNER TO

Questo modulo cambia il proprietario della tabella con l'utente specificato.

RENAME

I RENAME moduli modificano il nome di una tabella, il nome di una singola colonna in una tabella o il nome di un vincolo della tabella. Quando si rinomina un vincolo che ha un indice sottostante, anche l'indice viene rinominato. Non vi è alcun effetto sui dati archiviati.

SET SCHEMA

Questo modulo sposta la tabella in un altro schema. Vengono spostati anche gli indici, i vincoli e le sequenze associati di proprietà delle colonne della tabella.

Parameters

IF EXISTS

Non generate un errore se la tabella non esiste. In questo caso viene emesso un avviso.

name

Il nome (facoltativamente qualificato dallo schema) di una tabella esistente da modificare. Se ONLY viene specificato prima del nome della tabella, viene modificata solo quella tabella. Se non ONLY è specificato, la tabella e tutte le relative tabelle discendenti (se presenti) vengono modificate. Facoltativamente, * può essere specificato dopo il nome della tabella per indicare esplicitamente che sono incluse le tabelle discendenti.

column_name

Nome di una colonna nuova o esistente.

new_column_name

Nuovo nome per una colonna esistente.

new_name

Nuovo nome per la tabella.

data_type

Tipo di dati della nuova colonna.

table_constraint

Una definizione CHECK di vincolo. In Aurora DSQL, CHECK i vincoli devono essere aggiunti con l'opzione using. NOT VALID ALTER TABLE ADD CONSTRAINT CREATE TABLEPer la sintassi completa CHECK dei vincoli, vedere.

constraint_name

Nome di un vincolo nuovo o esistente.

CASCADE

Elimina automaticamente gli oggetti che dipendono dalla colonna o dal vincolo eliminato (ad esempio, le viste che fanno riferimento alla colonna) e, a loro volta, tutti gli oggetti che dipendono da tali oggetti.

RESTRICT

Rifiuta di eliminare la colonna o il vincolo se sono presenti oggetti dipendenti. Questo è il comportamento che segue di default.

new_owner

Il nome utente del nuovo proprietario della tabella.

new_schema

Il nome dello schema in cui verrà spostata la tabella.

Note

Il DROP COLUMN modulo non rimuove fisicamente la colonna, ma la rende semplicemente invisibile alle operazioni SQL. Le successive operazioni di inserimento e aggiornamento nella tabella memorizzeranno un valore nullo per la colonna. Pertanto, l'eliminazione di una colonna è rapida ma non ridurrà immediatamente le dimensioni su disco della tabella, poiché lo spazio occupato dalla colonna eliminata non viene recuperato. Lo spazio verrà recuperato nel tempo man mano che le righe esistenti vengono aggiornate.

Se si fa riferimento a una colonna eliminata come INCLUDE colonna nella chiave primaria, la definizione della chiave primaria verrà aggiornata per rimuovere la colonna eliminata.

Una tabella in Aurora DSQL può avere al massimo 255 colonne attive contemporaneamente e un massimo di 1600 colonne per tutta la durata della tabella. L'eliminazione di una colonna non comporta il recupero del relativo numero di attributo. La rimuove dal set di colonne attive, ma la colonna eliminata continua a contare rispetto al limite di durata di 1600 colonne. Per ulteriori informazioni, consulta Limiti del database in Aurora DSQL.