Обновление (SQL)
Оператор SQL UPDATE изменяет данные одной или нескольких записей в таблице . Либо все строки могут быть обновлены, либо подмножество может быть выбрано с использованием условия .
The UPDATE
заявление имеет следующий вид: [1]
UPDATE
имя_таблицыSET
имя_столбца = значение [, имя_столбца = значение ... ] [WHERE
состояние ]
Для UPDATE
для успеха пользователь должен иметь права манипулирования данными ( UPDATE
привилегии) для таблицы или столбца , и обновленное значение не должно конфликтовать со всеми применимыми ограничениями (такими как первичные ключи , уникальные индексы, CHECK
ограничения и NOT NULL
ограничения).
В некоторых базах данных, таких как PostgreSQL , при наличии предложения FROM целевая таблица присоединяется к таблицам, указанным в списке from, и каждая выходная строка соединения представляет собой операцию обновления целевой таблицы. При использовании FROM следует гарантировать, что соединение создает не более одной выходной строки для каждой изменяемой строки. Другими словами, целевая строка не должна присоединяться более чем к одной строке из другой таблицы (таблиц). Если это так, то для обновления целевой строки будет использоваться только одна из объединяемых строк, но какая из них будет использоваться, предсказать сложно. [2]
Из-за этой неопределенности обращение к другим таблицам только внутри подвыборок безопаснее, хотя зачастую труднее для чтения и медленнее, чем использование соединения.
MySQL не соответствует стандарту ANSI. [3]
Примеры
[ редактировать ]Установите значение столбца C1 в таблице T равным 1 только в тех строках, где значение столбца C2 равно «a».
UPDATE T
SET C1 = 1
WHERE C2 = 'a'
В таблице T установите значение столбца C1 равным 9, а значение C3 — равным 4 для всех строк, для которых значение столбца C2 равно «a».
UPDATE T
SET C1 = 9,
C3 = 4
WHERE C2 = 'a'
Увеличьте значение столбца C1 на 1, если значение в столбце C2 равно «a».
UPDATE T
SET C1 = C1 + 1
WHERE C2 = 'a'
Добавьте к значению в столбце C1 строку «текст», если значение в столбце C2 равно «a».
UPDATE T
SET C1 = 'text' || C1
WHERE C2 = 'a'
Установите значение столбца C1 в таблице T1 равным 2, только если значение столбца C2 находится в подсписке значений столбца C3 в таблице T2 , где столбец C4 равен 0.
UPDATE T1
SET C1 = 2
WHERE C2 IN ( SELECT C3
FROM T2
WHERE C4 = 0)
Можно также обновить несколько столбцов в одном операторе обновления:
UPDATE T
SET C1 = 1,
C2 = 2
Также возможны сложные условия и JOIN:
UPDATE T
SET A = 1
WHERE C1 = 1
AND C2 = 2
Некоторые базы данных допускают нестандартное использование предложения FROM:
UPDATE a
SET a.[updated_column] = updatevalue
FROM articles a
JOIN classification c
ON a.articleID = c.articleID
WHERE c.classID = 1
Или в системах Oracle (при условии, что существует индекс классификации.articleID):
UPDATE
(
SELECT *
FROM articles
JOIN classification
ON articles.articleID = classification.articleID
WHERE classification.classID = 1
)
SET [updated_column] = updatevalue
С длинным именем таблицы:
UPDATE MyMainTable AS a
SET a.LName = Smith
WHERE a.PeopleID = 1235
Потенциальные проблемы
[ редактировать ]- См. «Проблема Хэллоуина» . Это возможно для некоторых видов
UPDATE
операторы превращаются в бесконечный цикл , когдаWHERE
пункт и один или несколькоSET
в предложениях может использоваться переплетенный индекс .
Ссылки
[ редактировать ]- ^ http://dev.mysql.com/doc/refman/5.0/en/update.html упрощенно с этой страницы.
- ^ "ОБНОВЛЯТЬ" . Январь 2012.
- ^ «SQL — обновить столбец таблицы, затем другой столбец с обновленным значением предыдущего. MySQL / PostgreSQL различаются» .