MySQL:如果存在,则增加值,如果不存在,则创建(多个条件)

5
我有一个三列表格('xCoord','yCoord'和'Total')。如果x,y坐标对已经存在,我想要增加Total值,否则我想新建一行,将新的x和y值设置为1的Total。以下是到目前为止我最好的尝试-第一次运行查询会添加新行(如预期),第二次运行会添加新行而不是增加先前创建的行?是否有一种方法可以使用单个查询执行此操作?
INSERT
INTO  tbl_DATA_HeatmapValues (xCoord, yCoord, Total)
VALUES  (11, 22, 1)
ON DUPLICATE KEY
UPDATE  Total = Total + 1
2个回答

1

INSERT ... ON DUPLICATE KEY UPDATE 仅在插入操作会导致唯一索引或主键中存在重复值时才会执行更新操作。
详细信息请参见此链接:http://dev.mysql.com/doc/refman/5.6/en/insert-on-duplicate.html

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

CREATE UNIQUE INDEX ON tbl_DATA_HeatmapValues (xCoord, yCoord)

为了使索引创建起作用,需要稍微修改您的代码: CREATE UNIQUE INDEX index_name ON tbl_DATA_HeatmapValues (xCoord, yCoord); - AdamDynamic

1
你的查询应该有效,但是你需要拥有一个唯一索引。检查行是否已经存在是基于索引而不是实际数据。没有索引,就无法检查它是否存在,因此会插入任何内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接