Обновление (SQL) - Update (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

Возможные проблемы

Ссылки