Оператор SQL UPDATE изменяет данные одной или нескольких записей в таблице . Можно обновить либо все строки, либо выбрать подмножество с помощью условия .
Заявление UPDATE
имеет следующий вид: [1]
UPDATE
имя_таблицы имя_столбца = значение [, имя_столбца = значение ... ] [ условие ]SET
WHERE
Для UPDATE
успешного выполнения пользователь должен иметь привилегии на обработку данных ( UPDATE
привилегии) для таблицы или столбца , а обновленное значение не должно конфликтовать со всеми применимыми ограничениями (такими как первичные ключи , уникальные индексы, CHECK
ограничения и NOT NULL
ограничения).
В некоторых базах данных, таких как PostgreSQL , когда присутствует предложение FROM , по сути происходит следующее: целевая таблица присоединяется к таблицам, упомянутым в fromlist, и каждая выходная строка соединения представляет собой операцию обновления для целевой таблицы. При использовании FROM следует убедиться, что соединение создает не более одной выходной строки для каждой строки, которая должна быть изменена. Другими словами, целевая строка не должна присоединяться более чем к одной строке из других таблиц. Если это так, то только одна из строк соединения будет использоваться для обновления целевой строки, но какая именно из них будет использоваться, предсказать сложно. [2]
Из-за этой неопределенности ссылки на другие таблицы только в подзапросах выборки безопаснее, хотя зачастую их сложнее читать и они медленнее, чем при использовании объединения.
MySQL не соответствует стандарту ANSI. [3]
Установите значение столбца C1 в таблице T равным 1 только в тех строках, где значение столбца C2 равно «a».
ОБНОВЛЕНИЕ T УСТАНОВКИ C1 = 1 ГДЕ C2 = 'a'
В таблице T установите значение столбца C1 равным 9, а значение C3 равным 4 для всех строк, для которых значение столбца C2 равно «a».
ОБНОВЛЕНИЕ T НАБОР C1 = 9 , C3 = 4, ГДЕ C2 = 'a'
Увеличьте значение столбца C1 на 1, если значение в столбце C2 равно «a».
ОБНОВЛЕНИЕ T НАБОР C1 = C1 + 1 ГДЕ C2 = 'a'
Добавьте к значению в столбце C1 строку «текст», если значение в столбце C2 равно «а».
ОБНОВЛЕНИЕ T SET C1 = 'текст' || C1 ГДЕ C2 = 'a'
Установите значение столбца C1 в таблице T1 равным 2, только если значение столбца C2 найдено в подсписке значений столбца C3 в таблице T2, в котором столбец C4 равен 0.
ОБНОВЛЕНИЕ T1 УСТАНОВИТЬ C1 = 2 ГДЕ C2 В ( ВЫБРАТЬ C3 ИЗ T2 ГДЕ C4 = 0 )
Также можно обновить несколько столбцов в одном операторе обновления:
ОБНОВЛЕНИЕ T НАБОР C1 = 1 , C2 = 2
Возможны также сложные условия и JOIN:
ОБНОВЛЕНИЕ T УСТАНОВИТЕ A = 1, ГДЕ C1 = 1 И C2 = 2
Некоторые базы данных допускают нестандартное использование предложения FROM:
ОБНОВЛЕНИЕ a SET a .[ updated_column ] = updatevalue FROM articles a JOIN classification c ON a . articleID = c . articleID WHERE c . classID = 1
Или в системах Oracle (при условии, что есть индекс по classification.articleID):
ОБНОВЛЕНИЕ ( ВЫБРАТЬ * ИЗ статей ПРИСОЕДИНИТЬ классификацию К статьям.articleID = классификация.articleID ГДЕ классификация.classID = 1 ) УСТАНОВИТЬ [ обновленный_столбец ] = значение_обновления
С длинным названием таблицы:
ОБНОВИТЬ MyMainTable КАК НАБОР a.LName = Smith , ГДЕ a.PeopleID = 1235
UPDATE
стать бесконечным циклом , когда WHERE
предложение и одно или несколько SET
предложений могут использовать переплетенный индекс .