> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-trino-dialect.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Documentação para as instruções ALTER TABLE ... UPDATE

# Instruções ALTER TABLE ... UPDATE

```sql theme={null}
ALTER TABLE [db.]table [ON CLUSTER cluster] UPDATE column1 = expr1 [, ...] [IN PARTITION partition_id] WHERE filter_expr
```

Manipula os dados que correspondem à expressão de filtro especificada. É implementado como uma [mutação](/pt-BR/reference/statements/alter/index#mutations).

<Note>
  O prefixo `ALTER TABLE` faz com que essa sintaxe seja diferente da maioria dos outros sistemas compatíveis com SQL. Ele serve para indicar que, ao contrário de consultas semelhantes em bancos de dados OLTP, esta é uma operação pesada, não projetada para uso frequente.
</Note>

A `filter_expr` deve ser do tipo `UInt8`. Esta consulta atualiza os valores das colunas especificadas para os valores das expressões correspondentes nas linhas em que a `filter_expr` assume um valor diferente de zero. Os valores são convertidos para o tipo da coluna usando o operador `CAST`. Não há suporte para atualizar colunas usadas no cálculo da chave primária ou da chave de partição.

Uma única consulta pode conter vários comandos separados por vírgulas.

A sincronia do processamento da consulta é definida pela configuração [mutations\_sync](/pt-BR/reference/settings/session-settings/mutations#mutations_sync). Por padrão, ela é assíncrona.

**Veja também**

* [Mutações](/pt-BR/reference/statements/alter/index#mutations)
* [Sincronia das consultas ALTER](/pt-BR/reference/statements/alter/index#synchronicity-of-alter-queries)
* Configuração [mutations\_sync](/pt-BR/reference/settings/session-settings/mutations#mutations_sync)
* [`UPDATE` leve](/pt-BR/reference/statements/update) - Alternativa de atualização leve usando partes de patch
* [`APPLY PATCHES`](/pt-BR/reference/statements/alter/apply-patches) - Aplicar manualmente patches de atualizações leves

<div id="materialized-columns">
  ## Colunas materializadas
</div>

Uma coluna [`MATERIALIZED`](/pt-BR/reference/statements/create/table#materialized) cuja expressão lê uma
coluna atualizada é recalculada pela mutação, garantindo que seu valor armazenado permaneça consistente com os novos dados.

<div id="columns-calculated-from-ephemeral-columns">
  ### Colunas calculadas a partir de colunas EPHEMERAL
</div>

Uma coluna [`EPHEMERAL`](/pt-BR/reference/statements/create/table#ephemeral) existe apenas durante um
`INSERT` e nunca é armazenada. Portanto, uma coluna `MATERIALIZED` calculada a partir dela não pode ser recalculada por uma
mutação. Essa coluna mantém o valor calculado no momento do `INSERT`, que posteriormente deixa de corresponder à sua
expressão:

```sql theme={null}
CREATE TABLE test
(
    x Int32,
    e Int32 EPHEMERAL 0,
    m Int32 MATERIALIZED x + e
)
ENGINE = MergeTree
ORDER BY tuple();

INSERT INTO test (x, e) VALUES (1, 7);

ALTER TABLE test UPDATE x = 2 WHERE 1;

SELECT x, m FROM test;
```

```text theme={null}
┌─x─┬─m─┐
│ 2 │ 8 │
└───┴───┘
```

`m` é `8`, o valor calculado durante o `INSERT`, e não `2 + 7`: o valor de `e` não está disponível
fora do `INSERT` que o forneceu. A mutação registra um aviso no log do servidor ao ignorar uma
coluna por esse motivo. Para atualizar essa coluna, execute novamente o `INSERT` nas linhas afetadas.

<div id="related-content">
  ## Conteúdo relacionado
</div>

* Blog: [Como lidar com atualizações e exclusões no ClickHouse](https://clickhouse.com/blog/handling-updates-and-deletes-in-clickhouse)
