UPDATE (изменения строк таблицы)
Важно
Поддержка синтаксиса PostgreSQL в YDB находится в разработке. Использовать её в production окружениях не рекомендуется. Запросы в PostgreSQL могут исполняться до нескольких раз медленнее по сравнению с аналогичными запросами на YQL.
Основной сценарий, который можно тестировать — выполнение аналитических запросов к хранимым в YDB данным.
Синтаксис инструкции UPDATE
:
UPDATE <table name>
SET <column name> = [<new value>, CASE ... END]
WHERE <search column name> = [<search value>, IN]
Конструкция UPDATE ... SET ... WHERE
работает так:
- Задаётся название таблицы –
UPDATE``
`, в которой будет произведено обновление данных; - Указывается название столбца –
SET
<column name>
, где следует обновить данные. Может применяться конструкция для указания набора данныхCASE ... END
; - Задаётся новое значение –
<new value>
; - Указываются критерии поиска –
WHERE
с указанием колонки для поиска<search column name>
и значения, которому должен соответствовать критерий поиска . Если применяетсяCASE
, тогда указывается операторIN
с перечислением значений .
Обновление одной строки в таблице с условиями
Обновление без условий |
Обновление с условиями |
|
|
В примере "Обновление с условиями" используется оператор объединения условий AND
(И
) – условие будет выполнено только тогда, когда обе его части будут отвечать условиям истины. Также может использоваться оператор OR
(ИЛИ
) – условие будет выполнено, если хотя бы одна из его частей будет отвечать условиям истины. Оператор и условий может быть множество:
...
WHERE country = 'USA' AND city = 'Los Angeles' OR city = 'Florida';
Обновление одной записи в таблице с использованием выражений или функций
Часто при обновление данные нужно произвести с ними математические действия видоизменить с помощью функции.
Обновление с применением выражений |
Обновление с применением функций |
|
|
Обновление нескольких полей строки таблице
Обновить данные можно в нескольких колонках одновременно. Для этого делается перечисление <column name> = <column new value>
после ключевого слова SET
:
UPDATE people
SET country = 'Russia', city = 'Moscow'
WHERE lastname = 'Smith';
Обновление нескольких строк в таблицы с применением конструкции CASE ... END
Для одновременного обновления разных значений в разных строках можно использовать инструкцию CASE ... END
, с вложенными условиями выборки данных WHEN <column name> <condition> (=,>,<) THEN <new value>
. Далее следует конструкция WHERE <column name> IN (<column value>, ...)
, которая позволяет задать список значений, по которым будет выполнено условие.
Пример, где изменяется возраст (age
) людей (people
) в зависимости от их имен:
UPDATE people
SET age = CASE
WHEN name = 'John' THEN 32
WHEN name = 'Jane' THEN 26
END
WHERE name IN ('John', 'Jane');
Примечание
В отличии от PostgreSQL, в YDB с используются оптимистические блокировки. Это значит, что транзакции проверяют условия выполнения необходимых блокировок в конце своей работы, а не в начале. Если за время выполнения транзакции блокировка была нарушена – такая транзакция завершится ошибкой Transaction locks invalidated
. В этом случае можно попробовать выполнить аналогичную транзакцию снова.