Обновление (SQL)

редактировать

SQL UPDATE оператор изменяет данные одного или нескольких записей в таблице. Либо все строки могут быть обновлены, либо подмножество может быть выбрано с помощью условия.

UPDATEУтверждение имеет следующий вид:

UPDATE имя_таблицы имя_столбца = значение [, имя_столбца = значение... ] [ условие ]SET WHERE

Чтобы UPDATEоперация была успешной, пользователь должен иметь привилегии ( UPDATEпривилегии) ​​на манипулирование данными в таблице или столбце, а обновленное значение не должно конфликтовать со всеми применимыми ограничениями (такими как первичные ключи, уникальные индексы, CHECKограничения и NOT NULL ограничения).

В некоторых базах данных, таких как PostgreSQL, когда присутствует предложение FROM, по существу происходит то, что целевая таблица присоединяется к таблицам, указанным в списке fromlist, и каждая выходная строка соединения представляет собой операцию обновления для целевой таблицы. При использовании FROM следует убедиться, что объединение создает не более одной выходной строки для каждой изменяемой строки. Другими словами, целевая строка не должна присоединяться более чем к одной строке из другой таблицы (таблиц). Если это так, то только одна из строк соединения будет использоваться для обновления целевой строки, но какая из них будет использоваться, трудно предсказать.

Из-за этой неопределенности обращение к другим таблицам только в подвыборках безопаснее, хотя часто труднее для чтения и медленнее, чем при использовании соединения.

MySQL не соответствует стандарту ANSI.

Примеры

Установите значение столбца 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

Также возможны сложные условия и JOINs:

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 (при условии, что есть указатель на classification.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
Возможные проблемы
Ссылки
Последняя правка сделана 2023-04-17 05:16:49
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте