[英]Decrementing field in Postgresql doesn't work as expected
因此,我正在增加Postgresql中的字段。 假设我有一个表格questions
和一个名为votes
的BIGINT字段,其值已经为100000000。
现在我想这样递减:
UPDATE questions SET votes=votes-31500000 WHERE id = 1;
不幸的是,由于某种原因,最终结果在该字段中的值为-21500000
。 但是,如果我先获取该字段值,然后在我的代码中而不是在SQL查询中计算必要的递减值,则该值正确计算为68500000
,然后可以使用以下查询设置:
UPDATE questions SET votes=#{calculated_value} WHERE id = 1;
不用说,由于并发问题,后一种方式是不可接受的。 因此,我的问题是:为什么Postgresql会采用这种方式,以及如何使用SQL查询正确减小值?
我猜您正在将初始值设置为:
10,000,000
代替
100,000,000
(为清楚起见添加了逗号)
这就是为什么您减少31,500,000会产生负值的最简单解释。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.