ALTER TABLE
ALTER TABLE altera a definição de uma tabela.
Sintaxe compatível
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
Descrição
ADD [ COLUMN ] [ IF NOT EXISTS ]-
Este formulário adiciona uma nova coluna à tabela, usando a mesma sintaxe de CREATE TABLE. Se
IF NOT EXISTSfor especificado e já existir uma coluna com esse nome, nenhum erro será gerado. DROP [ COLUMN ] [ IF EXISTS ]-
Esse formulário remove uma coluna de uma tabela. Os índices e as restrições de tabela envolvendo a coluna serão automaticamente eliminados, exceto pelas restrições de chave primária. Não há suporte para descartar colunas de chave primária. As estatísticas multivariadas que fazem referência à coluna descartada também serão removidas se a remoção da coluna fizer com que as estatísticas contenham dados de apenas uma única coluna. Você precisará dizer
CASCADEse algo fora da tabela depender da coluna, por exemplo, referências de chave estrangeira ou visualizações. SeIF EXISTSfor especificado e a coluna não existir, nenhum erro será gerado. Nesse caso, será emitido um aviso em vez disso. SET/DROP DEFAULT-
Esses formulários definem ou removem o valor padrão de uma coluna (a remoção equivale a definir o valor padrão como NULL). O novo valor padrão será aplicado apenas a comandos
INSERTouUPDATEsubsequentes; ele não altera as linhas já existentes na tabela. DROP NOT NULL-
Esse formulário altera uma coluna para permitir valores nulos.
DROP EXPRESSION [ IF EXISTS ]-
Esse formulário transforma uma coluna gerada armazenada em uma coluna base comum. Os dados existentes na coluna são preservados, mas alterações futuras deixarão de aplicar a expressão de geração. Se
DROP EXPRESSION IF EXISTSfor especificado e a coluna não for uma coluna gerada, nenhum erro será gerado. Nesse caso, será emitido um aviso em vez disso. ADD GENERATED { ALWAYS | BY DEFAULT } AS IDENTITYSET GENERATED { ALWAYS | BY DEFAULT }DROP IDENTITY [ IF EXISTS ]-
Esses formulários alteram se uma coluna é uma coluna de identidade ou alteram o atributo de geração de uma coluna de identidade existente. Para mais detalhes, consulte CREATE TABLE. De modo semelhante a
SET DEFAULT, esses formulários afetam apenas o comportamento dos comandosINSERTeUPDATEsubsequentes; eles não fazem com que as linhas que já estão na tabela sejam alteradas.É possível usar a opção
sequence_optioncom ALTER SEQUENCE, comoINCREMENT BY. Esses formulários alteram a sequência subjacente a uma coluna de identidade existente.nota
O Amazon Aurora DSQL exige um valor explícito
CACHEao usarADD GENERATED AS IDENTITY. Além disso, as colunas de identidade são compatíveis apenas com colunasbigint.Ao usar colunas de identidade, é necessário considerar cuidadosamente o valor do cache. Para ter mais informações, consulte o texto explicativo “Importante” na página CREATE SEQUENCE.
Para obter orientações sobre a melhor forma de usar colunas de identidade com base nos padrões de workload, consulte Trabalhar com sequências e colunas de identidade.
SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT }-
Esse formulário define o modo de armazenamento de uma coluna. Para obter detalhes sobre os modos de armazenamento disponíveis, consulte Modo de armazenamento na página CREATE TABLE.
ADDtable_constraintNOT VALID-
Esse formulário adiciona uma nova restrição
CHECKa uma tabela. No Aurora DSQL, as restriçõesCHECKadicionadas viaALTER TABLE ADD CONSTRAINTdevem usar a opçãoNOT VALID. O Aurora DSQL cria a restrição, mas não a valida imediatamente em relação aos dados existentes. Isso permite que a restrição seja adicionada sem verificar a tabela inteira. A restrição se aplica imediatamente a todas as novas linhas e atualizações.Depois de adicionar uma restrição com
NOT VALID, useALTER TABLE ASYNC ... VALIDATE CONSTRAINTpara confirmar se os dados existentes também satisfazem a restrição. A validação é executada como um trabalho DDL assíncrono. Você pode monitorar o andamento usandosys.jobs. ADDtable_constraint_using_index-
Este formulário adiciona uma nova restrição
UNIQUEa uma tabela com base em um índice exclusivo existente. Todas as colunas do índice serão incluídas na restrição.O índice deve estar em um estado
VALID; não há suporte para adicionar uma restrição exclusiva usando um índice que ainda esteja em construção.Se um nome de restrição for fornecido, o índice será renomeado para corresponder ao nome da restrição. Caso contrário, a restrição terá o mesmo nome do índice.
Após a execução deste comando, o índice passa a ser “propriedade” da restrição, da mesma forma como se tivesse sido criado por um comando
CREATE UNIQUE INDEX ASYNCregular. Em particular, ao remover a restrição, o índice também será excluído. VALIDATE CONSTRAINT-
Esse formulário valida uma restrição que foi criada anteriormente com a opção
NOT VALID. Esse comando é uma operação de DDL assíncrona que não bloqueia outras transações. Ao executarALTER TABLE ASYNC ... VALIDATE CONSTRAINT, o Aurora DSQL exibe imediatamente umjob_id.Você pode monitorar o status dessa tarefa assíncrona usando a visualização de sistema
sys.jobs. Você também pode usarsys.wait_for_job(para bloquear a sessão atual até que a validação seja concluída ou falhe.'job_id')O trabalho de validação examina toda a tabela para verificar se todas as linhas existentes satisfazem a restrição. Depois que a validação é concluída, o Aurora DSQL marca a restrição como válida e o planejador de consultas a aplica para todas as consultas. Se a validação falhar porque as linhas existentes violam a restrição, o trabalho falhará e a restrição permanecerá no estado
NOT VALID.Esse comando valida somente as restrições que você criou com a opção
NOT VALID. Tentar validar uma restrição que já é válida resulta em um erro. DROP CONSTRAINT [ IF EXISTS ]-
Esse formulário remove a restrição especificada de uma tabela, juntamente com qualquer índice subjacente à restrição. Se
IF EXISTSfor especificado e a restrição não existir, nenhum erro será gerado. Nesse caso, será emitido um aviso em vez disso. OWNER TO-
Esse formulário altera o proprietário da tabela para o usuário especificado.
RENAME-
Os formulários
RENAMEalteram o nome de uma tabela, o nome de uma coluna individual de uma tabela ou o nome de uma restrição da tabela. Ao renomear uma restrição que possui um índice subjacente, o índice também é renomeado. Não há impacto sobre os dados armazenados. SET SCHEMA-
Esse formulário move a tabela para outro esquema. Os índices, as restrições e as sequências associados que pertencem às colunas da tabela também são movidos.
Parâmetros
IF EXISTS-
Não gere um erro se a tabela não existir. Um aviso é emitido nesse caso.
name-
O nome (opcionalmente qualificado pelo esquema) de uma tabela existente a ser alterada. Se
ONLYfor especificado antes do nome da tabela, somente essa tabela será alterada. SeONLYnão for especificado, a tabela e todas as suas tabelas descendentes (se houver) serão alteradas. Opcionalmente,*pode ser especificado após o nome da tabela para indicar explicitamente que as tabelas descendentes estão incluídas. column_name-
Nome de uma coluna nova ou existente.
new_column_name-
Novo nome para uma coluna existente.
new_name-
Novo nome da tabela.
data_type-
Tipo de dados da nova coluna.
table_constraint-
Uma definição de restrição
CHECK. No Aurora DSQL, as restriçõesCHECKdevem ser adicionadas com a opçãoNOT VALIDusandoALTER TABLE ADD CONSTRAINT. Consulte CREATE TABLE para obter a sintaxe completa da restriçãoCHECK. nome_restrição-
Nome de uma restrição nova ou existente.
CASCADE-
Remova automaticamente os objetos que dependem da coluna ou restrição removida (por exemplo, exibições que fazem referência à coluna) e, por sua vez, todos os objetos que dependem desses objetos.
RESTRICT-
Recuse a remoção da coluna ou restrição se houver objetos dependentes. Esse é o comportamento padrão.
new_owner-
O nome de usuário do novo proprietário da tabela.
new_schema-
O nome do esquema para o qual a tabela será movida.
Observações
O formulário DROP COLUMN não remove fisicamente a coluna, mas simplesmente a torna invisível para as operações SQL. As operações subsequentes de inserção e atualização na tabela armazenarão um valor nulo para a coluna. Portanto, remover uma coluna é rápido, mas não reduzirá imediatamente o tamanho da tabela no disco, pois o espaço ocupado pela coluna eliminada não é recuperado. O espaço será recuperado ao longo do tempo à medida que as linhas existentes forem atualizadas.
Se uma coluna eliminada for referenciada como uma coluna INCLUDE na chave primária, a definição de chave primária será atualizada para remover a coluna eliminada.
Uma tabela no Aurora DSQL pode ter no máximo 255 colunas ativas ao mesmo tempo e no máximo 1600 colunas durante a vida útil da tabela. Eliminar uma coluna não recupera o respectivo número de atributo. Isso a remove do conjunto de colunas ativas, mas a coluna eliminada continua contando para o limite de 1600 colunas ao longo da vida útil. Para obter mais informações, consulte Limites de banco de dados no Aurora DSQL.