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 работает так:

  1. Задаётся название таблицыUPDATE`` `, в которой будет произведено обновление данных;
  2. Указывается название столбцаSET <column name>, где следует обновить данные. Может применяться конструкция для указания набора данных CASE ... END;
  3. Задаётся новое значение<new value>;
  4. Указываются критерии поискаWHERE с указанием колонки для поиска <search column name> и значения, которому должен соответствовать критерий поиска . Если применяется CASE, тогда указывается оператор IN с перечислением значений .
  5. Обновление одной строки в таблице с условиями

    Обновление без условий

    Обновление с условиями

    UPDATE people
    SET name = 'Alexander'
    WHERE lastname = 'Doe';
    
    UPDATE people
    SET age = 31
    WHERE country = 'USA' AND city = 'Los Angeles';
    

    В примере "Обновление с условиями" используется оператор объединения условий AND (И) – условие будет выполнено только тогда, когда обе его части будут отвечать условиям истины. Также может использоваться оператор OR(ИЛИ) –  условие будет выполнено, если хотя бы одна из его частей будет отвечать условиям истины. Оператор и условий может быть множество:

    ...
    WHERE country = 'USA' AND city = 'Los Angeles' OR city = 'Florida';
    

    Обновление одной записи в таблице с использованием выражений или функций

    Часто при обновление данные нужно произвести с ними математические действия видоизменить с помощью функции.

    Обновление с применением выражений

    Обновление с применением функций

    UPDATE people
    SET age = age + 1
    WHERE country = 'Canada';
    
    UPDATE people
    SET name = UPPER(name)
    WHERE country = 'USA';
    

    Обновление нескольких полей строки таблице

    Обновить данные можно в нескольких колонках одновременно. Для этого делается перечисление <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. В этом случае можно попробовать выполнить аналогичную транзакцию снова.

Предыдущая
Следующая