stringtranslate.com

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

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

Заявление UPDATEимеет следующий вид: [1]

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

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

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

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

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

Примеры

Установите значение столбца C1 в таблице T равным 1 только в тех строках, где значение столбца C2 равно «a».

ОБНОВЛЕНИЕ T SET C1 = 1 , ГДЕ C2 = 'a'         

В таблице T установите значение столбца C1 равным 9, а значение C3 — равным 4 для всех строк, для которых значение столбца C2 равно «a».

UPDATE 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 = 'а'           

Установите значение столбца C1 в таблице T1 равным 2, только если значение столбца C2 находится в подсписке значений столбца C3 в таблице T2 , где столбец C4 равен 0.

ОБНОВЛЕНИЕ T1 SET C1 = 2 ГДЕ C2 IN ( ВЫБЕРИТЕ C3 ИЗ T2 ГДЕ C4 = 0 )                 

Можно также обновить несколько столбцов в одном операторе обновления:

ОБНОВЛЕНИЕ T НАБОР C1 = 1 , C2 = 2        

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

ОБНОВЛЕНИЕ T НАБОР A = 1 , ГДЕ C1 = 1 И C2 = 2             

Некоторые базы данных допускают нестандартное использование предложения FROM:

ОБНОВЛЕНИЕ НАБОРА a . [ обновленный_столбец ] = значение обновления ИЗ статей a Классификация JOIN c ON a . ID статьи = c . ИДЕНТИФИКАТОР статьи ГДЕ c . идентификатор класса = 1                   

Или в системах Oracle (при условии, что существует индекс классификации.articleID):

ОБНОВЛЕНИЕ ( ВЫБРАТЬ * ИЗ статей ПРИСОЕДИНЯЙТЕСЬ к классификации НА статьях . ID статьи = классификация . ID статьи ГДЕ классификация . classID = 1 ) SET [ обновленное_столбец ] = значение обновления                 

С длинным именем таблицы:

ОБНОВЛЕНИЕ MyMainTable КАК НАБОР . _ _ LName = Смит ГДЕ a . PeopleID = 1235         

Потенциальные проблемы

Рекомендации

  1. ^ http://dev.mysql.com/doc/refman/5.0/en/update.html упрощенно с этой страницы.
  2. ^ «ОБНОВЛЕНИЕ». Январь 2012.
  3. ^ «SQL — обновить столбец таблицы, затем другой столбец с обновленным значением предыдущего. MySQL / PostgreSQL различаются».