递减值下似乎赔率对我说:对重复密钥更新 - 在MySQL
INSERT INTO sometable (UNIQUEVALUE,NUMERICVALUE) VALUES ('valuethatexists','100') ON DUPLICATE KEY UPDATE NUMERICVALUE = NUMERICVALUE+VALUES(NUMERICVALUE);
假设你NUMERICVALUE
为0时
以上将其更改为100 - 这确实工作。
但是,如果您输入-100,则无法正常工作。
INSERT INTO sometable (UNIQUEVALUE,NUMERICVALUE) VALUES ('valuethatexists','-100') ON DUPLICATE KEY UPDATE NUMERICVALUE = NUMERICVALUE+VALUES(NUMERICVALUE);
上面的语句应该返回到0.它不是,在我的情况。它仍然在100.
我错过了什么吗?
编辑:这在别的地方出错了。我正在用PHP做这个。显示此错误的实际代码如下所示:
编辑2:这与PHP无关。问题是我的生产环境中的NUMERIC值为UNSIGNED,这意味着VALUES(NUMERICVALUE)在使用前从-100变为0。
我只是尝试SQLFiddel和我自己的5.7数据库。你是对的 - 它按预期做到了。我通过PHP来做这件事,显然这在其他地方是错误的。我会尝试进一步调查。 – nickdnk
好,只要一次尝试隔离问题一步:) – Benjamin
查看PHP示例更新的答案。 – nickdnk