Размещено: 2023-12-12 12:49:05
Теги: mysql
SQL ОБНОВЛЕНИЕ НЕСКОЛЬКИХ СТРОК ОДНИМ ЗАПРОСОМ
Что бы в mysql одним запросом записать изменения в нескольких строках, можно воспользоваться запросом:
UPDATE `test` SET `curs`= CASE WHEN `id`='1' THEN '111' WHEN `id`='2' THEN '2222' WHEN `id`='3' THEN '33333' ELSE `curs` END WHERE `coin`='ltc' Если перевести на русский, то в принципе уже все становится понятно: ОБНОВЛЕНИЕ `test` УСТАНОВИТЬ `curs`= В_СЛУЧАЕ КОГДА `id`='1', ТОГДА '111' КОГДА `id`='2' ТОГДА '2222' КОГДА `id`='3', ТОГДА '33333' ИНАЧЕ `curs` КОНЕЦ ГДЕ `coin`='ltc'
-
WHEN - (КОГДА) - частное условие при котором происходит запись, некий аналог WHERE (ГДЕ) если бы в запросе просто менялась, только одна строка
-
THEN - (ТОГДА) - значение, которое записывается
-
ELSE - (ИНАЧЕ) - обязательно указывать, если в остальных строках, которые не отвечают частному условию ничего не меняется, то необходимо указывать само значение, в данном примере curs, если случайно не указать ELSE, то в случае если все частные условия не выполняются, а альтернативное условие не задано, т.е. не прописан ELSE равный самому исходному значению, то весь столбец будет заменен на пустые значения, т.е. весь столбец будет удален и все данные потеряны.
-
WHERE - (ГДЕ) - в данном случае, это общее условие, для всех записей, если общее условие это объединение частных условий допустим для первого примера это будет WHERE id IN (1, 3), то ELSE можно не указывать и все будет работать корректно, но все-таки проще и надежнее его всегда указывать, и тогда само WHERE можно и не указывать.
В результате этого sql-запроса выполнится запись в строках с id = 1, 2, 3, при условии что coin='ltc'. Если у какой-то строки coin!='ltc' то записи в этой строке не произойдет, но во всех остальных строках значения будут записаны.
Важное дополнение! Тестирование на практике показывает, что данный способ работает даже медленнее, чем если сделать много мелких запросов.
На эту страницу чаще всего попадают по запросам: одним запросом несколько строк, update несколько значений, база данных, mysql