Добавить значение при обновлении дубликата ключа - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть таблица со схемой:

storeId varchar(255),
ttl int,
date varchar(255),
bytes bigint(255),
UNIQUE KEY storeId_date_index (storeId, date)

Я хочу вставить строку, если она не существует, в противном случае обновите ее.

Для каждого дублированного ключа, который я нажимаюЯ хочу суммировать старое значение с новым значением.Как это возможно с помощью команды ON DUPLICATE KEY UPDATE?

Вот что у меня есть:

insert into table (storeId, date, ttl, bytes) 
values 
('477866', '2019-02-05', 54543543, 100),
('6301', '2019-02-05', 54543543, 999999),
('12345', '2019-02-05', 54543543, 999999)
ON DUPLICATE KEY UPDATE
bytes = oldval + newval # sum old value with new value where storeId and date match in the values

1 Ответ

0 голосов
/ 05 февраля 2019

В кавычках [документация (https://dev.mysql.com/doc/refman/8.0/en/insert-on-duplicate.html):

В выражениях значений присваивания в предложении ON DUPLICATE KEY UPDATE можно использовать функцию VALUES(col_name) для ссылки на значения столбцов из INSERTчасть оператора INSERT ... ON DUPLICATE KEY UPDATE.

Т.е.:

INSERT INTO mhytable(storeId, date, ttl, bytes) 
VALUES 
('477866', '2019-02-05', 54543543, 100),
('6301', '2019-02-05', 54543543, 999999),
('12345', '2019-02-05', 54543543, 999999)
ON DUPLICATE KEY UPDATE
bytes = bytes + VALUES(bytes)
...