与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
是多少,它都需要工作。
答案 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的副本,因此尝试更新。