在MySQL UPDATE中添加到整数,如果不存在则插入

时间:2016-08-04 05:37:57

标签: mysql sql

this question类似,如果仅由一列的值标识的行不存在,我希望INSERT行进入MySQL表,UPDATE它如果是的话。但是,我想简单地将一个添加到行的整数列,而不是完全更改列值。

表格如下:

ref VARCHAR(16), num INT

如果表中的ref存在“值”,我想:

UPDATE table SET num = num + 1 WHERE ref = "value";

但如果它不存在,我想:

INSERT INTO table SET ref = "value", num = 1;

我知道有很多关于插入的问题,如果不存在,更新如果存在,很多都有一个很好的答案,但似乎没有人直接回答这个问题。我确信这很简单,但我担心ON DUPLICATE KEY会要求两列完全相同。就我而言,无论num是多少,它都需要工作。

2 个答案:

答案 0 :(得分:0)

在MySQL中,您可以使用INSERT OR UPDATE语法。如果INSERT违反了唯一性(索引),它将运行更新。

答案 1 :(得分:0)

假设您在ref字段中有一个唯一键,那么您可以按照建议使用 ON DUPLICATE KEY UPDATE 语法。

您要更新的字段不必使用该值进行更新。您可以在插图中设置默认值并更新column = column + 1:=

INSERT INTO table(ref, num)
VALUES("somevalue", 1)
ON DUPLICATE KEY UPDATE num=num + 1

如果num字段的默认值为1,那么在INSERT语句的主要部分中甚至不需要它: -

INSERT INTO table(ref)
VALUES("somevalue")
ON DUPLICATE KEY UPDATE num=num + 1

请注意,如果您有多个唯一索引(例如,可能是自动增量主键),则存在重复键处理的问题。一个值得注意的问题是,如果您使用自动增量主键具有值的记录0然后将来 INSERT ... ON DUPLICATE KEY UPDATE 语句可以只更新此记录。即,您插入记录要么不指定主键,要么指定一个NULL,并且MySQL认为作为主键0的副本,因此尝试更新。