MySQL在重复键上插入行更新多列

时间:2012-06-27 22:09:37

标签: mysql

我有一张表(name, date, stat1, stat2, stat3)(name, date)是PK。当我插入行时,会有重复的键,我需要总结三个统计数据。我在Java中使用以下查询与PreparedStatement:

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

是否有更简洁的查询来实现这一目标?因为我已经简化了查询,所以有十多个统计数据。

3 个答案:

答案 0 :(得分:30)

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)

答案 1 :(得分:0)

添加计算列(总和)并将其包含在PK中。

但是,这会对您的表进行非规范化。您可以使用代理键并在SELECT

中进行计算

答案 2 :(得分:-3)

如果指定ON DUPLICATE KEY UPDATE,并且插入的行将导致UNIQUE索引或PRIMARY KEY中出现重复值,则MySQL将执行旧行的UPDATE。例如,如果列a声明为UNIQUE并包含值1,则以下两个语句具有类似的效果:

  

INSERT INTO表(a,b,c)VALUES(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 OR b = 2 LIMIT 1;

相关问题