UPDATE
Atualiza valores em uma ou mais colunas de tabela quando uma condição é atendida.
nota
O tamanho máximo de uma única instrução SQL é 16 MB.
Sintaxe
[ WITH [RECURSIVE] common_table_expression [, common_table_expression , ...] ] UPDATE table_name [ [ AS ] alias ] SET column = { expression | DEFAULT } [,...] [ FROM fromlist ] [ WHERE condition ]
Parâmetros
- Cláusula WITH
Cláusula opcional que especifica uma ou mais expressões de tabela-comum. Consulte Cláusula WITH.
- table_name
-
Uma tabela temporária ou persistente. Somente o proprietário da tabela ou um usuário com o privilégio UPDATE na tabela pode atualizar linhas. Se usar a cláusula FROM ou selecionar das tabelas em uma expressão ou condição, você deve ter o privilégio SELECT nessas tabelas. Você não pode fornecer um alias à tabela aqui. No entanto, você pode especificar um alias na cláusula FROM.
nota
As tabelas externas do Amazon Redshift Spectrum são somente leitura. Não é possível usar UPDATE uma tabela externa.
- alias
-
Nome alternativo temporário para uma tabela de destino. Os aliases são opcionais. A palavra-chave AS é sempre opcional.
- SET coluna =
-
Uma ou mais colunas que você deseja modificar. As colunas que não estão listadas mantêm seus valores atuais. Não inclui o nome da tabela na especificação de uma coluna de destino. Por exemplo,
UPDATE tab SET tab.col = 1
é inválido. - expressão
-
Uma expressão que define o novo valor para a coluna especificada.
- DEFAULT
-
Atualiza a coluna com o valor padrão atribuído à coluna na instrução CREATE TABLE.
- FROM listadetabelas
-
Você pode atualizar uma tabela fazendo referência às informações em outras tabelas. Liste essas outras tabelas na cláusula FROM ou use uma subconsulta como parte da condição WHERE. As tabelas listadas na cláusula FROM podem ter aliases. Se você precisar incluir a tabela de destino da instrução UPDATE na lista, use um alias.
- WHERE condição
-
Cláusula opcional que restringe atualizações em linhas que correspondem a uma condição. Quando a condição retorna como
true
, as colunas SET especificadas são atualizadas. A condição pode ser um predicado simples em uma coluna ou uma condição baseada no resultado de uma subconsulta.Você pode nomear qualquer tabela na subconsulta, incluindo a tabela de destino para UPDATE.
Observações de uso
Depois de atualizar um grande número de linhas em uma tabela:
-
Limpe a tabela para recuperar espaço e reclassificar as linhas.
-
Analise a tabela para atualizar as estatísticas do planejador de consulta.
As junções esquerda, direita e externa completa não são compatíveis com a cláusula FROM de uma instrução UPDATE; elas retornam o seguinte erro:
ERROR: Target table must be part of an equijoin predicate
Se você precisar especificar uma junção externa, use uma subconsulta na cláusula WHERE da instrução UPDATE.
Se sua instrução UPDATE exigir uma junção automática à tabela de destino, você precisa especificar a condição de junção, além dos critérios da cláusula WHERE que qualificam as linhas à operação de atualização. Geralmente, quando ocorre uma junção dos próprios dados da tabela de destino ou com outra tabela, uma prática recomendada é usar uma subconsulta que separe claramente as condições de junção dos critérios que qualifiquem linhas para atualização.
Consultas UPDATE com várias correspondências por linha lançam um erro quando o parâmetro de configuração error_on_nondeterministic_update
é definido como true. Para obter mais informações, consulte error_on_nondeterministic_update.
É possível atualizar uma coluna GENERATED BY DEFAULT AS IDENTITY. As colunas definidas como GENERATED BY DEFAULT AS IDENTITY podem ser atualizadas com os valores fornecidos. Para obter mais informações, consulte GENERATED BY DEFAULT AS IDENTITY.