MySQL UPDATE: обновление данных с примерами запросов

Когда речь заходит о обновлении данных в MySQL, все почему-то сразу вспоминают DELETE или INSERT. Но, ребята, UPDATE — это тот самый workhorse, который на проде спасает от лишних миграций и позволяет элегантно чинить баги в данных. Без него никуда: от массовых правок до точечных фиксов.

В этом посте покажу, как работает UPDATE в MySQL, какие есть варианты использования, где можно вляпаться, и как делать все по уму. Погнали!

Возможности

  • Обновление одной или сразу пачки строк по условию
  • Модификация нескольких столбцов за раз
  • Использование подзапросов и JOIN-ов в апдейте
  • Работа с транзакциями (ROLLBACK спасет жизнь!)
  • Возможность ограничить количество обновляемых строк через LIMIT

Более подробно — официальная дока MySQL.

Что требуется

  • Любой сервер или ноутбук с Linux/Windows/macOS
  • MySQL версии 5.7+ (лучше 8.0, если не живёшь в прошлом)
  • Терминал, любой клиент MySQL (cli, DBeaver, HeidiSQL и т.д.)
  • Права доступа на UPDATE в нужной базе

Железо — хватит даже виртуалки с 1ГБ RAM, если не делаешь апдейты на миллион строк сразу.

Установка MySQL — пошагово

  1. Linux (Debian/Ubuntu):
    sudo apt update
    sudo apt install mysql-server
    sudo systemctl start mysql
    sudo mysql_secure_installation
  2. macOS (через Homebrew):
    brew update
    brew install mysql
    brew services start mysql
  3. Windows:
    • Скачай MySQL Installer
    • Поставь сервер и Workbench (опционально)
    • Запусти MySQL из меню Пуск или через Services
  4. Проверь подключение:
    mysql -u root -p

    Если зашёл — всё окей.

Использование UPDATE: полный разбор

Базовый синтаксис:

UPDATE имя_таблицы
SET столбец1 = значение1, столбец2 = значение2
WHERE условие;

Примеры:

  • Обновить e-mail юзера с id=42:
    UPDATE users
    SET email = 'new@email.com'
    WHERE id = 42;
  • Массовое обновление статуса:
    UPDATE orders
    SET status = 'archived'
    WHERE created_at < '2023-01-01';
  • Инкрементировать счетчик:
    UPDATE posts
    SET views = views + 1
    WHERE id = 123;
  • Обновить по JOIN (например, подтянуть данные из связанной таблицы):
    UPDATE users u
    JOIN profiles p ON u.id = p.user_id
    SET u.avatar = p.avatar_url
    WHERE p.avatar_url IS NOT NULL;
  • Ограничить количество строк:
    UPDATE logs
    SET checked = 1
    WHERE checked = 0
    LIMIT 100;
  • Обновление с подзапросом:
    UPDATE products
    SET price = price * 0.9
    WHERE id IN (SELECT product_id FROM sales WHERE discount = 1);

Все варианты и нюансы — здесь.

Ошибки и как делать не надо

  • Без WHERE — боль всей поддержки:
    UPDATE users SET is_active = 0;

    Отключит всех юзеров, если забыл WHERE. Никогда так не делай!

  • Забыл сделать бэкап перед массовым UPDATE? — RTFM!
  • Обновление больших таблиц без транзакции:
    START TRANSACTION;
    UPDATE big_table SET ... WHERE ...;
    COMMIT;

    Так безопаснее — можно откатить, если что-то пошло не так.

  • Обновление по ошибочному условию (например, WHERE 1=1):
    Дважды проверь условие!
  • Не тестируй UPDATE сразу на проде — сначала на копии!

Реальный пример в окружении

Был кейс: надо было массово изменить email-адреса всем тестовым пользователям (чтобы не улетала рассылка на живые ящики). Решили так:

UPDATE users
SET email = CONCAT('test+', id, '@example.com')
WHERE is_test = 1;

Проверили через SELECT перед этим, потом сделали бэкап, только после этого — UPDATE. Всё прошло гладко, рассылка не улетела не туда.

Заключение

UPDATE в MySQL — инструмент мощный, но требует внимания и уважения. Всегда думай о WHERE, делай бэкапы, тестируй на копиях, и не ленись читать доку. Если что — вот официальная страница UPDATE.

Если остались вопросы — пиши в комменты или ищи ответы на StackOverflow. Всем апдейтов без боли!

Хотите прочитать больше про Разное?
Отзывов нет.

Ваш отзыв

Пожалуйста, заполните поля снизу и добавьте отзыв!.
Имя *
E-mail *
Сайт
Сообщение *