Обновление нескольких строк с разными условиями в MySQL

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Если вам нужно изменить несколько строк, у которых уникальные значения, за одну операцию, используйте конструкцию CASE:

SQL
Скопировать код
UPDATE ваша_таблица
SET ваш_столбец = CASE id
  WHEN 1 THEN 'значениеA'
  WHEN 2 THEN 'значениеB'
  WHEN 3 THEN 'значениеC'
  ELSE ваш_столбец
END
WHERE id IN (1, 2, 3);

Данная конструкция CASE позволяет провести целевое обновление строк на основе их уникальных идентификаторов, оставив остальные строки без изменений благодаря условию ELSE. Производите замену ваша_таблица, ваш_столбец, id и 'значениеX' на соответствующие параметры вашей базы данных.

Кинга Идем в IT: пошаговый план для смены профессии

Продвинутое использование CASE в UPDATE

Установка сложных условий

Вы можете выполнить сложные обновления, комбинируя CASE с разнообразными условиями:

SQL
Скопировать код
UPDATE ваша_таблица
SET ваш_столбец = CASE
  WHEN условие1 THEN 'значениеA'
  WHEN условие2 THEN 'значениеB'
  ELSE ваш_столбец
END
WHERE другое_условие;

Проработайте условия так, чтобы они точно отвечали заданным требованиям, гарантируя тем самым сохранение целостности данных и соблюдение бизнес-логики.

Комбинирование JOIN и CASE

Можно провести обновление данных, основываясь на информации из другой таблицы с использованием JOIN:

SQL
Скопировать код
UPDATE ваша_таблица
JOIN другая_таблица ON ваша_таблица.внешний_ключ = другая_таблица.первичный_ключ
SET ваша_таблица.ваш_столбец = CASE
  WHEN другая_таблица.условие THEN 'новое_значение'
  ELSE ваша_таблица.ваш_столбец
END
WHERE ваша_таблица.условие;

Использование временных таблиц для сложных обновлений

Для выполнения сложных обновлений может потребоваться создание временной таблицы с последующим соединением (JOIN) при обновлении:

SQL
Скопировать код
CREATE TEMPORARY TABLE временная_таблица AS
SELECT id, новое_значение FROM вычисления;

UPDATE ваша_таблица
JOIN временная_таблица ON ваша_таблица.id = временная_таблица.id
SET ваша_таблица.ваш_столбец = временная_таблица.новое_значение;

DROP TEMPORARY TABLE временная_таблица;

Альтернативные методы обновления

INSERT INTO ... ON DUPLICATE KEY UPDATE

Рассмотрите использование следующего подхода для операции upsert (обновление или вставка):

SQL
Скопировать код
INSERT INTO ваша_таблица (id, ваш_столбец)
VALUES
  (1, 'значениеA'),
  (2, 'значениеB'),
  (3, 'значениеC')
ON DUPLICATE KEY UPDATE
  ваш_столбец = VALUES(ваш_столбец);

Работа с датами на профессиональном уровне

При работе с датами, использование встроенных типов дат обеспечивает точное сравнение и хранение данных:

SQL
Скопировать код
UPDATE ваша_таблица
SET столбец_даты = CASE
  WHEN id = 1 THEN '2023-01-01'
  WHEN id = 2 THEN '2023-02-01'
END
WHERE id IN (1, 2);

Визуализация

Представьте, что вы – директор службы доставки, и вам надлежит отправить множество посылок в разные места, однако вы хотите сделать это одной партией:

Markdown
Скопировать код
Перед обновлением: [📦➡️🏙, 📦➡️🗻, 📦➡️🏖, 📦➡️🌄]
SQL
Скопировать код
UPDATE отгрузка SET назначение = CASE
    WHEN номер_посылки = 1 THEN '🏙'
    WHEN номер_посылки = 2 THEN '🗻'
    WHEN номер_посылки = 3 THEN '🏖'
    WHEN номер_посылки = 4 THEN '🌄'
    ELSE назначение
END
WHERE номер_посылки IN (1, 2, 3, 4);

После выполнения этой единой команды, каждый посылка получается свой уникальный адрес доставки:

Markdown
Скопировать код
После обновления: [📦1➡️🏙, 📦2➡️🗻, 📦3➡️🏖, 📦4➡️🌄]

Исключительно эффективно и организованно: все посылки отправляются точно в указанные места, и это сделано мгновенно! 🚀

Основные моменты при обновлении с неуникальными ключами

Работа с неуникальными ключами обновления

Используя неуникальные ключи, особенное внимание уделяется предотвращению неожиданных обновлений. Такие ключи в условии WHERE должны точно идентифицировать обновляемые строки.

Читабельность и поддерживаемость кода

Важно обеспечивать читабельность и удобство поддержки кода, независимо от сложности обновления. Комментарии, псевдонимы и форматирование значительно улучшают восприятие запросов.

Время выполнения запросов

Учитывая объемы данных в современных БД, важно стремиться к оптимизации запросов. Неоптимизированные запросы могут вызывать серьезные нагрузки. Применяйте критический анализ при оценке влияния запросов на производительность до и после их оптимизации.

Полезные материалы

  1. MySQL :: Руководство по MySQL 8.0 :: 13.2.17 Инструкция UPDATEофициальная документация MySQL по командам UPDATE.
  2. sql – Множественные обновления в MySQL – Stack Overflowобсуждения и решения сообщества по проведению множественных обновлений в MySQL.
  3. Database Performance Monitor (DPM) | SolarWinds — инструменты для мониторинга и улучшения производительности баз данных MySQL и прочие функции, включая массовые операции обновления данных.