Справочник от Автор24
Найди эксперта для помощи в учебе
Найти эксперта
+2

Обновление данных. Команда UPDATE

Синтаксис команды UPDATE

Запросы на изменение данных в уже существующей таблице в языке SQL выполняются при помощи команды UPDATE.

UPDATE [LOW_PRIORITY] [IGNORE] имя_таблицы

SET поле1=значение1 [, поле2=значение2 ...]

[WHERE условие]

[ORDER BY список полей]

[LIMIT число_строк];

  • В инструкции SET указывается, какие именно поля должны получит новые значения и сами эти значения.
  • В инструкции WHERE можно указать условие, которому должны соответствовать обновляемые записи. Если инструкция WHERE пропущена, то обновлению подвергаются все записи данной таблицы.
  • Если указана инструкция LOW_PRIORITY, то обновлению присваивается низкий приоритет. Это значит, что обновление произойдет тогда, когда все другие пользователи не закончат просмотр данных таблицы.
  • Инструкция IGNORE указывает СУБД, каким образом реагировать на дублирование первичного ключа. Если инструкция пропущена, то в случае возникновения дублей команда UPDATE будет прервана. При наличии IGNORE прерывания не случится, а записи с дублями первичного ключа будут пропущены.
  • Инструкция ORDER BY упорядочивает таблицу по выбранным полям.
  • Инструкция LIMIT позволяет обновить строго заданное количество строк. Само по себе использование LIMIT редко имеет смысл, так как обновляются произвольные строки, cоответствующие условию WHERE.
Пример 1

Рассмотрим таблицу tovar со следующими данными:

Обновление данных. Команда UPDATE. Автор24 — интернет-биржа заказчиков и авторов

Увеличим на 10% цену тех товаров, которые имеют исходную цену больше 300р.

UPDATE Tovar SET price=price*1.1 WHERE price > 300;

Результат:

Обновление данных. Команда UPDATE. Автор24 — интернет-биржа заказчиков и авторов

Обновление соединения таблиц

В качестве таблицы при выполнении UPDATE вполне может фигурировать соединение таблиц при помощи оператора JOIN (LEFT JOIN, RIGHT JOIN). А присваиваемое значение может выбираться при помощи оператора CASE. В этом случае синтаксис команды UPDATE будет таким:

UPDATE таблица1 [LEFT | RIGHT] join таблица2 on таблица1.поле1=таблица2.поле2

SET поле3=CASE поле4

WHEN значение1_поля4 THEN значение1

WHEN значение2_поля4 THEN значение2

WHEN значение3_поля4 THEN значение3

ELSE значение4_поле4 END;

Пример 2

Пусть необходимо увеличить на 10% цены кровельных материалов, на 20% цены лакокрасочных материалов и на 30% цены инструментов. Наименование категории товара указано в таблице category.

UPDATE tovar left join category on tovar.categ=category.itcateg

SET price=case category.categ_name

WHEN "Кровельные" THEN price*1.1

WHEN "Лакокрасочные" THEN price*1.2

WHEN "Инструменты" THEN price*1.3

ELSE price END;

«Обновление данных. Команда UPDATE» 👇
Помощь эксперта по теме работы
Найти эксперта
Решение задач от ИИ за 2 минуты
Решить задачу
Помощь с рефератом от нейросети
Написать ИИ

Обновление с вложенным запросом

В инструкции WHERE также можно использовать вложенный запрос (подзапрос).

UPDATE таблица1 SET поле1=значение1, поле2=значение2….

WHERE полеN IN

(SELECT таблица2.поле1 FROM таблица2 WHERE условие);

Пример 3

Пусть имеется таблица discount, где перечислены названия товаров, на которые должна быть предоставлена скидка. Всем товарам, которые есть в этом списке, нужно снизить цену на 10%.

UPDATE tovar SET price=0.9*price WHERE tovar_name IN (SELECT discount.tovar_name FROM discount);

В этом запорсе сначала будет сформирован список названий дисконтных товаров подзапросом:

SELECT discount.tovar_name FROM discount

После этого будут обновлены те строки таблицы tovar, в которых поле tovar_name имеет значение, входящее в сформированный на предыдущем шаге список.

Обновление с упорядочиванием

Пусть необходимо увеличить уникальный код всех товаров idtovar на 1. То есть товар с кодом 1 должен получить код 2, товар с кодом 2 должен получить код 3 и т.д. Команда UPDATE обновляет таблицу, последовательно перебирая строки. Когда код первого товара заменяется с 1 на 2, в таблице все еще есть товар с кодом 2 (до его обновления еще не дошла очередь). Таким образом, возникает дублирование первичного ключа и ошибка. Эту проблему можно решить, используя команду UPDATE вместе с ORDER BY. Нужно просто упорядочить коды товаров в обратном порядке и начать обновлять таблицу с конца:

UPDATE tovar SET idtovar=1+idtovar ORDER BY idtovar DESC;

Дата написания статьи: 18.08.2016
Найди решение своей задачи среди 1 000 000 ответов
Крупнейшая русскоязычная библиотека студенческих решенных задач
Все самое важное и интересное в Telegram

Все сервисы Справочника в твоем телефоне! Просто напиши Боту, что ты ищешь и он быстро найдет нужную статью, лекцию или пособие для тебя!

Перейти в Telegram Bot