在重复密钥更新中增加价值

时间:2019-02-05 15:05:00

标签: mysql sql syntax sql-insert upsert

我有一个带有模式的表:

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 :(得分:2)

引用[文档(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)