Префикс
ALTER TABLE отличает этот синтаксис от большинства других систем с поддержкой SQL. Он призван показать, что, в отличие от похожих запросов в OLTP-базах данных, это ресурсоёмкая операция, не предназначенная для частого использования.filter_expr должен иметь тип UInt8. Этот запрос обновляет значения указанных столбцов значениями соответствующих выражений в строках, для которых filter_expr принимает ненулевое значение. Значения приводятся к типу столбца с помощью оператора CAST. Обновление столбцов, которые используются при вычислении первичного ключа или ключа партиционирования, не поддерживается.
Один запрос может содержать несколько команд, разделённых запятыми.
Синхронность обработки запроса определяется настройкой mutations_sync. По умолчанию обработка выполняется асинхронно.
См. также
- Мутации
- Синхронность запросов ALTER
- настройка mutations_sync
- Легковесный
UPDATE- Альтернативное легковесное обновление с использованием патч-частей APPLY PATCHES- Ручное применение патчей из легковесных обновлений
Материализованные столбцы
MATERIALIZED, выражение которого использует обновлённый
столбец, пересчитывается в ходе мутации, поэтому оно остаётся согласованным с новыми данными.
Столбцы, вычисляемые на основе EPHEMERAL-столбцов
EPHEMERAL существует только во время выполнения
INSERT и никогда не сохраняется, поэтому MATERIALIZED-столбец, вычисляемый на его основе, нельзя пересчитать с помощью
мутации. Такой столбец сохраняет значение, вычисленное во время INSERT, которое впоследствии перестаёт соответствовать его
выражению:
m равно 8 — значению, вычисленному при выполнении INSERT, а не 2 + 7: значение e недоступно
за пределами INSERT, в котором оно было задано. Если по этой причине мутация пропускает
столбец, она записывает предупреждение в журнал сервера. Чтобы обновить такой столбец, повторно выполните INSERT для затронутых строк.