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 SET C1 = 1 ГДЕ C2 = 'a'
В таблице T установите значение столбца C1 равным 9 и значение C3 равным 4 для всех строк, для которых значение столбца C2 равно «a».
ОБНОВЛЕНИЕ T SET C1 = 9 , C3 = 4 ГДЕ C2 = 'a'
Увеличьте значение столбца C1 на 1, если значение в столбце C2 равно «a».
ОБНОВЛЕНИЕ T SET C1 = C1 + 1 ГДЕ C2 = 'a'
Добавьте к значению в столбце C1 строку «текст», если значение в столбце C2 равно «a».
ОБНОВЛЕНИЕ T SET C1 = 'текст' || C1 ГДЕ C2 = 'a'
Установите значение столбца C1 в таблице T1 равным 2, только если значение столбца C2 находится в подсписке значений в столбце C3 в таблице T2 , где столбец C4 равен 0.
ОБНОВЛЕНИЕ T1 SET C1 = 2 ГДЕ C2 IN ( ВЫБРАТЬ C3 ИЗ T2, ГДЕ C4 = 0 )
Также можно обновить несколько столбцов в одном операторе обновления:
ОБНОВЛЕНИЕ T SET C1 = 1 , C2 = 2
Также возможны сложные условия и присоединения:
ОБНОВЛЕНИЕ T SET A = 1 ГДЕ C1 = 1 И C2 = 2
Некоторые базы данных допускают нестандартное использование предложения FROM:
ОБНОВЛЕНИЕ SET . [ Updated_column ] = updatevalue ИЗ статей РЕГИСТРИРУЙТЕСЬ классификации гр ПО . articleID = c . articleID ГДЕ c . classID = 1
Или в системах Oracle (при условии, что есть индекс для classification.articleID):
ОБНОВЛЕНИЕ ( SELECT , * ИЗ статей РЕГИСТРИРУЙТЕСЬ классификации ПО статьям . ArticleID = классификация . ArticleID КУДА классификация . ClassID = 1 ) SET [ updated_column ] = updatevalue
С длинным названием таблицы:
ОБНОВЛЕНИЕ MyMainTable КАК КОМПЛЕКТ . LName = Smith ГДЕ a . PeopleID = 1235
Возможные проблемы [ править ]
- См. « Проблема Хэллоуина» . Некоторые типы
UPDATE
операторов могут превратиться в бесконечный цикл, еслиWHERE
предложение и одно или несколькоSET
предложений могут использовать переплетенный индекс .