Postgresql中的递减字段没有按预期工作

时间:2014-05-26 13:53:50

标签: sql postgresql

所以我正在玩Postgresql中增加一个字段。 假设我有一个表questions和一个名为votes的BIGINT字段,其值已经为100000000。

现在我想减样:

UPDATE questions SET votes=votes-31500000 WHERE id = 1;

不幸的是,最终结果是由于某种原因在此字段中值-21500000。 但是,如果我首先获取字段值,然后在我的代码中而不是在SQL查询中计算必要的递减值,那么该值将正确计算为68500000,然后我可以使用此查询设置: / p>

UPDATE questions SET votes=#{calculated_value} WHERE id = 1;

毋庸置疑,由于并发问题,后一种方式是不可接受的。因此,我的问题是:为什么Postgresql会以这种方式运行,如何使用SQL查询正确地减少值?

1 个答案:

答案 0 :(得分:1)

我猜你要将初始值设置为:

10,000,000

而不是

100,000,000

(为清晰起见,添加了逗号)

这是最简单的解释,为什么你的31,500,000减少会产生负值。