> ## 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.

> Documentación sobre las sentencias ALTER TABLE ... UPDATE

# Sentencias ALTER TABLE ... UPDATE

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

Manipula los datos que coinciden con la expresión de filtrado especificada. Se implementa como una [mutación](/es/reference/statements/alter/index#mutations).

<Note>
  El prefijo `ALTER TABLE` hace que esta sintaxis sea distinta de la de la mayoría de los demás sistemas que admiten SQL. Su objetivo es indicar que, a diferencia de consultas similares en bases de datos OLTP, esta es una operación costosa que no está pensada para usarse con frecuencia.
</Note>

`filter_expr` debe ser de tipo `UInt8`. Esta consulta actualiza los valores de las columnas especificadas con los valores de las expresiones correspondientes en las filas para las que `filter_expr` toma un valor distinto de cero. Los valores se convierten al tipo de la columna mediante el operador `CAST`. No se admite actualizar columnas que se usan en el cálculo de la clave primaria o de la clave de partición.

Una consulta puede contener varios comandos separados por comas.

El carácter síncrono del procesamiento de la consulta se define mediante la configuración [mutations\_sync](/es/reference/settings/session-settings/mutations#mutations_sync). De forma predeterminada, es asíncrona.

**Véase también**

* [Mutaciones](/es/reference/statements/alter/index#mutations)
* [Sincronía de las consultas ALTER](/es/reference/statements/alter/index#synchronicity-of-alter-queries)
* Configuración [mutations\_sync](/es/reference/settings/session-settings/mutations#mutations_sync)
* [`UPDATE` ligera](/es/reference/statements/update) - Actualización ligera alternativa mediante partes de parche
* [`APPLY PATCHES`](/es/reference/statements/alter/apply-patches) - Aplicar manualmente parches de actualizaciones ligeras

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

Una columna [`MATERIALIZED`](/es/reference/statements/create/table#materialized) cuya expresión hace referencia a una
columna actualizada se recalcula mediante la mutación, por lo que su valor almacenado se mantiene coherente con los nuevos datos.

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

Una columna [`EPHEMERAL`](/es/reference/statements/create/table#ephemeral) existe únicamente durante un
`INSERT` y nunca se almacena, por lo que una columna `MATERIALIZED` calculada a partir de ella no puede volver a calcularse mediante una
mutación. Esta columna conserva el valor calculado en el momento del `INSERT`, que deja de coincidir con su
expresión:

```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` es `8`, el valor calculado durante el `INSERT`, y no `2 + 7`: el valor de `e` no está disponible
fuera del `INSERT` que lo proporcionó. La mutación escribe una advertencia en el registro del servidor cuando omite una
columna por este motivo. Para actualizar dicha columna, vuelva a insertar las filas afectadas mediante `INSERT`.

<div id="related-content">
  ## Contenido relacionado
</div>

* Blog: [Cómo gestionar actualizaciones y eliminaciones en ClickHouse](https://clickhouse.com/blog/handling-updates-and-deletes-in-clickhouse)
