如何在PostgreSQL中增加值?

168
我对Postgres还不太熟悉。我想要将Postgres表中一个字段的值(一个整数)加一。例如,如果'totals'表有两列,'name'和'total',而Bill的总数是203,我应该使用什么SQL语句来将Bill的总数变为204?
1个回答

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

如果您想确保当前值确实为203(而不是意外增加它),您还可以添加另一个条件:

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

3
我试图对非整数数据类型进行递增操作,结果出现以下错误:ERROR: operator does not exist: character varying + integer LINE 2: SET total = total + 1。将值转换为整数后,像这样进行操作即可解决问题:SET total = total::int + 1 - Stew-au
50
不要将数字存储在varchar列中,长期来看这会给你带来麻烦。使用整数(或bigint等适当的数据类型),但不要使用字符数据类型。 - user330315
14
这个声明是原子的吗?还是我需要先悲观锁定表格才能进行写操作?(我担心在给total赋值和获取total进行total + 1操作之间,表格已经被写入。) - miho
22
在关系型数据库中,单个语句始终是原子的。但运行更新操作不会阻止其他人读取旧值,直到您的事务提交。 - user330315
4
关于 upsert,请参考 https://dba.stackexchange.com/questions/161127/column-reference-is-ambiguous-when-upserting-element-into-table。在插入元素到表中时,如果出现“列引用不明确”的错误提示,请查看此链接。 - iElectric
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接