Выражение UPDATE
Выражение UPDATE обновляет указанные строки в таблице и записывает в них новые значения. Условие для выбора обновляемых строк можно задать через выражение WHERE.
В качестве результата запроса возвращается количество обновленных строк.
Вместо удаления или изменения строк в существующих таблицах (выражения DELETE и UPDATE) рекомендуется создавать новые таблицы на основе существующих с применением необходимых фильтров (выражение CREATE TABLE) и при необходимости удалять существующие (выражение TRUNCATE).
|
Синтаксис
UPDATE <table_name>
SET <col_name> = <value> [ , <col_name> = <value> , ... ]
[ WHERE <condition> ]
Параметры
-
[ SET <col_name> = <value> ]Указывает колонку для обновления и значения, которые необходимо записать. Можно указывать несколько выражений через
,для любого количества колонок. -
[ WHERE <condition> ]Указывает условие, которое будет использоваться для выбора строк для обновления.
Разрешенные операторы внутри условия
<condition>:-
=равно -
>больше -
<меньше -
in (…)входит в список -
их комбинации
-
Примеры
Пример 1
Создадим таблицу с числами от 1 до 10 и обновим колонку numbers, записав в нее значения из нее самой, умноженные на 100:
CREATE TABLE demo.numbers (numbers BIGINT);
INSERT INTO demo.numbers (numbers)
SELECT unnest(generate_series(1,10));
UPDATE demo.numbers
SET numbers = numbers*100;
+-------+
| Count |
+-------+
| 10 |
+-------+
Проверим содержимое таблицы:
SELECT * FROM demo.numbers;
+---------+
| numbers |
+---------+
| 100 |
+---------+
| 200 |
+---------+
| 300 |
+---------+
| 400 |
+---------+
| 500 |
+---------+
| 600 |
+---------+
| 700 |
+---------+
| 800 |
+---------+
| 900 |
+---------+
| 1000 |
+---------+
Пример 2
Создадим таблицу с двумя колонками num_1 и num_2. Запишем в колонку num_1 числа от 1 до 10, а колонку num_2 оставим пустой (там будут значения NULL). Обновим колонки num_1 и num_2: запишем в num_1 значения из нее самой, умноженные на 100, а в num_2 — значения из num_1, умноженные на -1. Сделаем все это с условием, что значения из num_1 входят в список (2,4,6,8,10,12):
CREATE TABLE demo.numbers (num_1 BIGINT, num_2 BIGINT);
INSERT INTO demo.numbers (num_1)
SELECT unnest(generate_series(1,10));
UPDATE demo.numbers
SET num_1 = num_1*100, num_2 = num_1*-1
WHERE num_1 in (2,4,6,8,10,12);
+-------+
| Count |
+-------+
| 5 |
+-------+
Проверим содержимое таблицы:
SELECT * FROM demo.numbers;
+-------+-------+
| num_1 | num_2 |
+-------+-------+
| 200 | -2 |
+-------+-------+
| 400 | -4 |
+-------+-------+
| 600 | -6 |
+-------+-------+
| 800 | -8 |
+-------+-------+
| 1000 | -10 |
+-------+-------+
| 1 | null |
+-------+-------+
| 3 | null |
+-------+-------+
| 5 | null |
+-------+-------+
| 7 | null |
+-------+-------+
| 9 | null |
+-------+-------+