Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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      

Возможные проблемы [ править ]

Ссылки [ править ]