Вставить новую строку или сменить данные в старой строке, с учетом нескольких неуникальных полей - MySQL
Формулировка задачи:
доброго времени суток!
задача: есть некая таблица, допустим строки в ней
ID (int) - что логично - уникальный,
param1 (int),
param2 (int), - эти 3 не уникальны и не ключи
param3 (int),
value1 (int),
value2 (int), - тут хранятся некие значения
value3 (int)
предположим у нас уже есть некоторые значения
вопрос: можно ли построить 1 запрос, в котором бы либо новая строка по трём параметрам внеслась бы, если таковой еще не было, либо внеслись бы новые value, если строка со всеми трёмя param уже есть?
то есть, если вносим param1=8, param2=8, param3=8 и некие value (любые, другие), то изменятся value в строке с id=1. если вносим param1=8, param2=8, param3=2, то такой строки у нас нет и надо добавить новую.
id | param1 | param2 | param3 | value1 | value2 | value3 |
1 | 8 | 8 | 8 | 10 | 20 | 30 |
Решение задачи: «Вставить новую строку или сменить данные в старой строке, с учетом нескольких неуникальных полей»
textual
Листинг программы
insert into tst (param1, param2, param3, value1, value2, value3) values (8, 8, 8, 10, 20, 30), (8, 8, 5, 8, 8, 5); insert into tst (param1, param2, param3, value1, value2, value3) values (8, 8, 2, 40, 50, 60), -- этого не было (8, 8, 8, 1, 2, 3) -- это уже есть (values увеличится на 1) on duplicate key update value1 = value1 + 1, value2 = value2 + 1, value3 = value3 + 1;
Объяснение кода листинга программы
- Код выполняет вставку данных в таблицу
tst
с использованием оператораinsert into ... values ...
. - Первая строка вставляется с помощью
values (8, 8, 8, 10, 20, 30)
. - Вторая строка вставляется с помощью
values (8, 8, 5, 8, 8, 5)
. - Третья строка вставляется с помощью
values (8, 8, 2, 40, 50, 60)
. - Четвертая строка вставляется с помощью
values (8, 8, 8, 1, 2, 3)
. - Последняя строка
on duplicate key update
используется для обновления существующих строк, если в таблице уже есть строки с таким же значением в столбцахparam1
,param2
иparam3
. - В случае дублирования ключа, значения в столбцах
value1
,value2
иvalue3
увеличиваются на 1. - Значения в столбцах
value1
,value2
иvalue3
увеличиваются на 1 для каждой строки, которая уже существует в таблицеtst
. - Результатом выполнения кода будет вставка новых строк и обновление существующих строк в таблице
tst
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д