我有一个包含三列的表格('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
答案 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)