Подтвердить что ты не робот

MySQL вставляет строку в дубликат ключевых обновлений нескольких столбцов

У меня есть таблица (name, date, stat1, stat2, stat3), (name, date) - это PK. Когда я вставляю строки, будут дубликаты ключей, и мне нужно суммировать три статистики. Я использую следующий запрос с PreparedStatement в Java:

INSERT INTO tb (name, date, stat1, stat2, stat3)
VALUES (?, ?, ?, ?, ?)
ON DUPLICATE KEY UPDATE stat1 = stat1 + ?, stat2 = stat2 + ?, stat3 = stat3 + ?

Есть ли более сжатый запрос для достижения этого? Поскольку я упростил запрос, там более десяти характеристик.

4b9b3361

Ответ 1

INSERT INTO tb (name, date, stat1, stat2, stat3)
VALUES (?, ?, ?, ?, ?)
ON DUPLICATE KEY UPDATE stat1 = stat1 + VALUES(stat1), stat2 = stat2 + VALUES(stat2), stat3 = stat3 + VALUES(stat3)

Ответ 2

Добавьте вычисленный столбец (сумма) и включите его в свой ПК.

Однако это делает денормализацию вашей таблицы. Вы можете использовать суррогатный ключ и выполнить расчет в своем SELECT

Ответ 3

Если вы укажете ON DUPLICATE KEY UPDATE, и будет вставлена ​​строка, которая приведет к дублированию значения в индексе UNIQUE или PRIMARY KEY, MySQL выполнит ОБНОВЛЕНИЕ старой строки. Например, если столбец a объявлен как UNIQUE и содержит значение 1, следующие два оператора имеют схожий эффект:

INSERT INTO таблица (a, b, c) ЗНАЧЕНИЯ (1,2,3)   ON DUPLICATE KEY UPDATE c = c + 1;

Пример эквивалентного обновления, как показано ниже,

Таблица UPDATE SET c = c + 1 WHERE a = 1;

Если столбец a и b уникален, эквивалентный запрос на обновление будет,

Таблица UPDATE SET c = c + 1 WHERE a = 1 ИЛИ b = 2 LIMIT 1;