在Postgres中增加一个值


108

我对Postgres有点陌生。我想在postgres表的字段中获取一个值(它是整数)并将其递增1。例如,如果表“总计”有2列,即“名称”和“总计”,而Bill总共有203列,那么我将使用什么SQL语句将Bill的总数移动到204?

Answers:


209
UPDATE totals 
   SET total = total + 1
WHERE name = 'bill';

如果要确保当前值确实为203(并且又不小心将其增加),则还可以添加另一个条件:

UPDATE totals 
   SET total = total + 1
WHERE name = 'bill'
  AND total = 203;

1
我试图增加非整数数据类型并得到:ERROR: operator does not exist: character varying + integer LINE 2: SET total = total + 1 通过将值转换为整数来解决,例如SET total = total::int + 1
Stew-au 2012年

33
@炖-AU:做存储在varchar列中的数字。从长远来看,这将给您带来麻烦。使用整数(或bigint或任何合适的值),但不要使用字符数据类型。
a_horse_with_no_name 2012年

4
这条语句是原子的还是我需要悲观地锁定表才能首先进行写入?(我担心在为总数+ 1分配总数与提取总数之间,已经在表中做了一些写操作。)
miho

9
在关系数据库中,单个语句始终是原子的。但是,运行更新不会阻止其他人在提交事务之前读取旧值
a_horse_with_no_name

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.