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

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

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