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

> Документация по командам ALTER TABLE ... UPDATE

# Команды ALTER TABLE ... UPDATE

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

Изменяет данные, соответствующие указанному условию фильтрации. Реализовано как [мутация](/ru/reference/statements/alter/index#mutations).

<Note>
  Префикс `ALTER TABLE` отличает этот синтаксис от большинства других систем с поддержкой SQL. Он призван показать, что, в отличие от похожих запросов в OLTP-базах данных, это ресурсоёмкая операция, не предназначенная для частого использования.
</Note>

`filter_expr` должен иметь тип `UInt8`. Этот запрос обновляет значения указанных столбцов значениями соответствующих выражений в строках, для которых `filter_expr` принимает ненулевое значение. Значения приводятся к типу столбца с помощью оператора `CAST`. Обновление столбцов, которые используются при вычислении первичного ключа или ключа партиционирования, не поддерживается.

Один запрос может содержать несколько команд, разделённых запятыми.

Синхронность обработки запроса определяется настройкой [mutations\_sync](/ru/reference/settings/session-settings/mutations#mutations_sync). По умолчанию обработка выполняется асинхронно.

**См. также**

* [Мутации](/ru/reference/statements/alter/index#mutations)
* [Синхронность запросов ALTER](/ru/reference/statements/alter/index#synchronicity-of-alter-queries)
* настройка [mutations\_sync](/ru/reference/settings/session-settings/mutations#mutations_sync)
* [Легковесный `UPDATE`](/ru/reference/statements/update) - Альтернативное легковесное обновление с использованием патч-частей
* [`APPLY PATCHES`](/ru/reference/statements/alter/apply-patches) - Ручное применение патчей из легковесных обновлений

<div id="materialized-columns">
  ## Материализованные столбцы
</div>

Значение столбца [`MATERIALIZED`](/ru/reference/statements/create/table#materialized), выражение которого использует обновлённый
столбец, пересчитывается в ходе мутации, поэтому оно остаётся согласованным с новыми данными.

<div id="columns-calculated-from-ephemeral-columns">
  ### Столбцы, вычисляемые на основе EPHEMERAL-столбцов
</div>

Столбец [`EPHEMERAL`](/ru/reference/statements/create/table#ephemeral) существует только во время выполнения
`INSERT` и никогда не сохраняется, поэтому `MATERIALIZED`-столбец, вычисляемый на его основе, нельзя пересчитать с помощью
мутации. Такой столбец сохраняет значение, вычисленное во время `INSERT`, которое впоследствии перестаёт соответствовать его
выражению:

```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` — значению, вычисленному при выполнении `INSERT`, а не `2 + 7`: значение `e` недоступно
за пределами `INSERT`, в котором оно было задано. Если по этой причине мутация пропускает
столбец, она записывает предупреждение в журнал сервера. Чтобы обновить такой столбец, повторно выполните `INSERT` для затронутых строк.

<div id="related-content">
  ## Связанные материалы
</div>

* Блог: [Обработка обновлений и удалений в ClickHouse](https://clickhouse.com/blog/handling-updates-and-deletes-in-clickhouse)
