Как обновить данные в таблице SQL (UPDATE)?
Нужно поменять статус заказа с номером 42 на «отправлен», а ещё поднять цену всех товаров категории «книги» на 10%. Как обновить данные в SQL? Чего опасаться при UPDATE?
2 ответа
Изменение существующих строк делает команда UPDATE в связке SET (что менять) и WHERE (где менять):
UPDATE orders
SET status = 'shipped'
WHERE id = 42;
Можно менять несколько столбцов сразу через запятую и использовать в значениях текущие данные:
UPDATE products
SET price = price * 1.1,
updated_at = NOW()
WHERE category = 'books';
Здесь цена каждой книги умножается на 1.1 (рост на 10%).
Самое важное и опасное: если забыть WHERE, UPDATE изменит ВСЕ строки таблицы:
UPDATE orders SET status = 'shipped'; -- ОШИБКА: все заказы станут shipped!
Это частая катастрофа новичков. Привычка профессионалов — сначала проверить условие через SELECT:
SELECT * FROM orders WHERE id = 42; -- убедились, что строка та
и только потом менять SELECT на UPDATE с тем же WHERE.
Дополнительно:
- Заворачивайте важные правки в транзакцию (
BEGIN ... COMMIT), чтобы при ошибке сделатьROLLBACK. - В некоторых СУБД (Postgres) можно вернуть изменённые строки:
UPDATE ... RETURNING *.
Хороший защитный приём в инструментах вроде MySQL Workbench — режим safe updates: он просто запрещает выполнить UPDATE или DELETE без WHERE по ключу. Если ваш UPDATE «не выполняется» с ошибкой про safe mode — это не баг, а защита от того, чтобы вы случайно не перезаписали всю таблицу. Всегда указывайте WHERE по первичному ключу, когда правите одну строку.