MySQL:如果存在则递增值,否则创建(多个标准)

时间:2014-02-24 11:32:31

标签: mysql sql

我有一个包含三列的表格('xCoord','yCoord'和'Total')。如果x,y坐标对已经存在,我想增加Total值,否则我想用新的x和y值创建一个新行,其中Total = 1。

以下是我迄今为止最好的尝试 - 第一次运行查询添加一个新行(如预期的那样),再次运行它会添加一个新行,而不是增加先前创建的行?有没有办法通过单个查询执行此操作?

INSERT
INTO  tbl_DATA_HeatmapValues (xCoord, yCoord, Total)
VALUES  (11, 22, 1)
ON DUPLICATE KEY
UPDATE  Total = Total + 1

2 个答案:

答案 0 :(得分:1)

您的查询应该有效,但您需要具有唯一索引。如果已存在行,则检查基于索引,而不是行中的实际数据。没有索引,也没有检查是否存在,因此无论如何插入。

答案 1 :(得分:0)

INSERT ... ON DUPLICATE KEY UPDATE仅在插入会在UNIQUE索引或PRIMARY KEY中导致重复值的情况下执行更新,有关详细信息,请参阅此链接:http://dev.mysql.com/doc/refman/5.6/en/insert-on-duplicate.html

考虑在xCoord,yCoord列上创建唯一索引:

CREATE UNIQUE INDEX ON tbl_DATA_HeatmapValues (xCoord, yCoord)