Jump to content

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

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

[ редактировать ]
  1. ^ http://dev.mysql.com/doc/refman/5.0/en/update.html упрощенно с этой страницы.
  2. ^ "ОБНОВЛЯТЬ" . Январь 2012.
  3. ^ «SQL — обновить столбец таблицы, затем другой столбец с обновленным значением предыдущего. MySQL / PostgreSQL различаются» .
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 97966942a737fedd3c752497e1ce9f6e__1714468680
URL1:https://arc.ask3.ru/arc/aa/97/6e/97966942a737fedd3c752497e1ce9f6e.html
Заголовок, (Title) документа по адресу, URL1:
Update (SQL) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)