Вставить новую строку или сменить данные в старой строке, с учетом нескольких неуникальных полей - 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.