Обновление нескольких строк с разными условиями в MySQL
Быстрый ответ
Если вам нужно изменить несколько строк, у которых уникальные значения, за одну операцию, используйте конструкцию CASE:
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'
на соответствующие параметры вашей базы данных.
Продвинутое использование CASE в UPDATE
Установка сложных условий
Вы можете выполнить сложные обновления, комбинируя CASE с разнообразными условиями:
UPDATE ваша_таблица
SET ваш_столбец = CASE
WHEN условие1 THEN 'значениеA'
WHEN условие2 THEN 'значениеB'
ELSE ваш_столбец
END
WHERE другое_условие;
Проработайте условия так, чтобы они точно отвечали заданным требованиям, гарантируя тем самым сохранение целостности данных и соблюдение бизнес-логики.
Комбинирование JOIN и CASE
Можно провести обновление данных, основываясь на информации из другой таблицы с использованием JOIN:
UPDATE ваша_таблица
JOIN другая_таблица ON ваша_таблица.внешний_ключ = другая_таблица.первичный_ключ
SET ваша_таблица.ваш_столбец = CASE
WHEN другая_таблица.условие THEN 'новое_значение'
ELSE ваша_таблица.ваш_столбец
END
WHERE ваша_таблица.условие;
Использование временных таблиц для сложных обновлений
Для выполнения сложных обновлений может потребоваться создание временной таблицы с последующим соединением (JOIN) при обновлении:
CREATE TEMPORARY TABLE временная_таблица AS
SELECT id, новое_значение FROM вычисления;
UPDATE ваша_таблица
JOIN временная_таблица ON ваша_таблица.id = временная_таблица.id
SET ваша_таблица.ваш_столбец = временная_таблица.новое_значение;
DROP TEMPORARY TABLE временная_таблица;
Альтернативные методы обновления
INSERT INTO ... ON DUPLICATE KEY UPDATE
Рассмотрите использование следующего подхода для операции upsert (обновление или вставка):
INSERT INTO ваша_таблица (id, ваш_столбец)
VALUES
(1, 'значениеA'),
(2, 'значениеB'),
(3, 'значениеC')
ON DUPLICATE KEY UPDATE
ваш_столбец = VALUES(ваш_столбец);
Работа с датами на профессиональном уровне
При работе с датами, использование встроенных типов дат обеспечивает точное сравнение и хранение данных:
UPDATE ваша_таблица
SET столбец_даты = CASE
WHEN id = 1 THEN '2023-01-01'
WHEN id = 2 THEN '2023-02-01'
END
WHERE id IN (1, 2);
Визуализация
Представьте, что вы – директор службы доставки, и вам надлежит отправить множество посылок в разные места, однако вы хотите сделать это одной партией:
Перед обновлением: [📦➡️🏙, 📦➡️🗻, 📦➡️🏖, 📦➡️🌄]
UPDATE отгрузка SET назначение = CASE
WHEN номер_посылки = 1 THEN '🏙'
WHEN номер_посылки = 2 THEN '🗻'
WHEN номер_посылки = 3 THEN '🏖'
WHEN номер_посылки = 4 THEN '🌄'
ELSE назначение
END
WHERE номер_посылки IN (1, 2, 3, 4);
После выполнения этой единой команды, каждый посылка получается свой уникальный адрес доставки:
После обновления: [📦1➡️🏙, 📦2➡️🗻, 📦3➡️🏖, 📦4➡️🌄]
Исключительно эффективно и организованно: все посылки отправляются точно в указанные места, и это сделано мгновенно! 🚀
Основные моменты при обновлении с неуникальными ключами
Работа с неуникальными ключами обновления
Используя неуникальные ключи, особенное внимание уделяется предотвращению неожиданных обновлений. Такие ключи в условии WHERE
должны точно идентифицировать обновляемые строки.
Читабельность и поддерживаемость кода
Важно обеспечивать читабельность и удобство поддержки кода, независимо от сложности обновления. Комментарии, псевдонимы и форматирование значительно улучшают восприятие запросов.
Время выполнения запросов
Учитывая объемы данных в современных БД, важно стремиться к оптимизации запросов. Неоптимизированные запросы могут вызывать серьезные нагрузки. Применяйте критический анализ при оценке влияния запросов на производительность до и после их оптимизации.
Полезные материалы
- MySQL :: Руководство по MySQL 8.0 :: 13.2.17 Инструкция UPDATE — официальная документация MySQL по командам UPDATE.
- sql – Множественные обновления в MySQL – Stack Overflow — обсуждения и решения сообщества по проведению множественных обновлений в MySQL.
- Database Performance Monitor (DPM) | SolarWinds — инструменты для мониторинга и улучшения производительности баз данных MySQL и прочие функции, включая массовые операции обновления данных.