Skip to main content
Изменяет данные, соответствующие указанному условию фильтрации. Реализовано как мутация.
Префикс ALTER TABLE отличает этот синтаксис от большинства других систем с поддержкой SQL. Он призван показать, что, в отличие от похожих запросов в OLTP-базах данных, это ресурсоёмкая операция, не предназначенная для частого использования.
filter_expr должен иметь тип UInt8. Этот запрос обновляет значения указанных столбцов значениями соответствующих выражений в строках, для которых filter_expr принимает ненулевое значение. Значения приводятся к типу столбца с помощью оператора CAST. Обновление столбцов, которые используются при вычислении первичного ключа или ключа партиционирования, не поддерживается. Один запрос может содержать несколько команд, разделённых запятыми. Предложение IN PARTITION ограничивает мутацию перечисленными партициями. Без него в таблицах семейства ReplicatedMergeTree, когда настройка optimize_mutations_with_partition_pruning включена (по умолчанию), ClickHouse автоматически определяет условия ключа партиционирования в filter_expr и выполняет мутации только затронутых партиций. В нереплицируемых таблицах MergeTree используйте явное предложение IN PARTITION, чтобы ограничить мутацию конкретными партициями. Синхронность обработки запроса определяется настройкой mutations_sync. По умолчанию обработка выполняется асинхронно. См. также

Материализованные столбцы

Значение столбца MATERIALIZED, выражение которого использует обновлённый столбец, пересчитывается в ходе мутации, поэтому оно остаётся согласованным с новыми данными.

Столбцы, вычисляемые на основе EPHEMERAL-столбцов

Столбец EPHEMERAL существует только во время выполнения INSERT и никогда не сохраняется, поэтому MATERIALIZED-столбец, вычисляемый на его основе, нельзя пересчитать с помощью мутации. Такой столбец сохраняет значение, вычисленное во время INSERT, которое впоследствии перестаёт соответствовать его выражению:
m равно 8 — значению, вычисленному при выполнении INSERT, а не 2 + 7: значение e недоступно за пределами INSERT, в котором оно было задано. Если по этой причине мутация пропускает столбец, она записывает предупреждение в журнал сервера. Чтобы обновить такой столбец, повторно выполните INSERT для затронутых строк.

Связанные материалы

Последнее изменение 26 сентября 2026 г.