Обновление (SQL) - Update (SQL)
An SQL ОБНОВИТЬ оператор изменяет данные одной или нескольких записей в стол. Либо все строки могут быть обновлены, либо подмножество может быть выбрано с помощью условие.
В ОБНОВИТЬ выписка имеет следующий вид:[1]
ОБНОВИТЬtable_nameНАБОРимя_столбца = ценить [, имя_столбца = ценить ...] [КУДАусловие]
Для ОБНОВИТЬ чтобы добиться успеха, пользователь должен иметь права на манипулирование данными (ОБНОВИТЬ привилегия) на столе или столбец и обновленное значение не должно конфликтовать со всеми применимыми ограничениями (такими как первичные ключи, уникальные индексы, ПРОВЕРИТЬ ограничения, и НЕ НОЛЬ ограничения).
В некоторых базах данных, например PostgreSQL, когда Предложение FROM присутствует, то, по сути, происходит то, что целевая таблица присоединяется к таблицам, упомянутым в исходном списке, и каждая выходная строка соединения представляет собой операцию обновления для целевой таблицы. При использовании FROM следует убедиться, что объединение создает не более одной выходной строки для каждой строки, которую необходимо изменить. Другими словами, целевая строка не должна присоединяться более чем к одной строке из другой таблицы (таблиц). Если это так, то только одна из строк соединения будет использоваться для обновления целевой строки, но какая из них будет использоваться, трудно предсказать.[2]
Из-за этой неопределенности обращение к другим таблицам только в подвыборках безопаснее, хотя часто труднее для чтения и медленнее, чем при использовании соединения.
MySQL не соответствует стандарту ANSI.[3]
Примеры
Установите значение столбца C1 в таблице Т до 1, только в тех строках, где значение столбца C2 это".
ОБНОВИТЬ Т НАБОР C1 = 1 КУДА C2 = 'а'В таблице Т, установите значение столбца C1 до 9 и значение C3 до 4 для всех строк, для которых значение столбца C2 это".
ОБНОВИТЬ Т НАБОР C1 = 9, C3 = 4 КУДА C2 = 'а'Увеличить значение столбца C1 на 1, если значение в столбце C2 это".
ОБНОВИТЬ Т НАБОР C1 = C1 + 1 КУДА C2 = 'а'Добавить значение в столбец C1 со строкой «текст», если значение в столбце C2 это".
ОБНОВИТЬ Т НАБОР C1 = 'текст' || C1 КУДА C2 = 'а'Установите значение столбца C1 в таблице Т1 до 2, только если значение столбца C2 находится в подсписке значений в столбце C3 в таблице Т2 имея колонку C4 равно 0.
ОБНОВИТЬ Т1 НАБОР C1 = 2 КУДА C2 В ( ВЫБРАТЬ C3 ИЗ Т2 КУДА C4 = 0)Также можно обновить несколько столбцов в одном операторе обновления:
ОБНОВИТЬ Т НАБОР C1 = 1, C2 = 2Также возможны сложные условия и JOINs:
ОБНОВИТЬ Т НАБОР А = 1 КУДА C1 = 1 И C2 = 2Некоторые базы данных допускают нестандартное использование предложения FROM:
ОБНОВИТЬ а НАБОР а.[updated_column] = updatevalue ИЗ статьи а ПРИСОЕДИНИТЬСЯ классификация c НА а.articleID = c.articleID КУДА c.ID класса = 1Или в системах Oracle (при условии, что есть индекс для classification.articleID):
ОБНОВИТЬ( ВЫБРАТЬ * ИЗ статьи ПРИСОЕДИНИТЬСЯ классификация НА статьи.articleID = классификация.articleID КУДА классификация.ID класса = 1)НАБОР [updated_column] = updatevalueС длинным названием таблицы:
ОБНОВИТЬ MyMainTable В КАЧЕСТВЕ аНАБОР а.LName = СмитКУДА а.PeopleID = 1235Возможные проблемы
- Видеть Проблема Хэллоуина. Возможно для некоторых видов
ОБНОВИТЬзаявления, чтобы стать бесконечный цикл когдаКУДАпункт и один или несколькоНАБОРстатьи могут содержать переплетенные индекс.