UPDATE¶
DML-команда UPDATE
используется для обновления данных в
колонках таблицы. При использовании фильтрующего условия (WHERE
) можно
применять ее только к определенным кортежам таблицы. В то время как для
полной замены кортежей можно использовать команду INSERT
c параметром
on conflict do replace
, команда UPDATE
подойдет для выборочной
замены значений отдельных колонок в нужных кортежах. В качестве
источника данных для UPDATE
можно использовать как непосредственно
передаваемые значения, так и результат подзапроса в конструкции FROM
(SELECT ...)
.
Синтаксис¶
Выражение¶
Диаграмма
Литерал¶
Диаграмма
Параметры¶
-
TABLE — имя таблицы. Соответствует правилам имен для всех объектов в кластере.
-
Псевдоним — позволяет переопределить названия получаемых столбцов в запросах. Псевдоним вставляется после опционального слова
AS
и может содержать произвольный текст со следующими ограничениями: он не должен начинаться с цифры и не может содержать пробелов и специальных служебных символов (кроме знака подчеркивания).
Ограничения¶
При использовании UPDATE
следует учитывать следующие ограничения:
- нельзя обновить значение первичного ключа (например,
id
) - нельзя указать одну и ту же колонку дважды (например,
name = 'Duke', name = 'Nukem'
) - нельзя обновить значение в системной колонке
bucket_id
(оно вычисляется автоматически) - передаваемое новое значение не должно противоречить типу данных, присвоенному колонке
Примеры¶
Обновление явно указанных данных в отдельном кортеже с использованием условия:
UPDATE characters SET name = 'Etch', year = 2010 WHERE id = 2;
Обновление всех значений в колонке:
UPDATE characters SET year = 2010;
Обновление с помощью ссылки на существующую колонку таблицы (без необходимости использовать подзапрос):
UPDATE characters SET year = year + 1;
Обновление значений колонки на основе значений другой колонки (с подзапросом):
UPDATE characters SET name = item
FROM (SELECT id AS i, name AS item FROM assets)
WHERE id = i;
В данном случае использования подзапроса (FROM (SELECT ...)
),
потребуется указать и фильтр (WHERE
) для того, чтобы каждом кортеже
первой таблицы соответствовала ровно один кортеж второй таблицы.
В каждом случае результатом успешного выполнения будет сообщение с количеством обработанных кортежей. Например:
---
- row_count: 10
...