增加Postgres中的值

gre*_*rth 91 postgresql increment

我对postgres有点新意.我想在postgres表中的一个字段中取一个值(这是一个整数)并将其递增一.例如,如果表'totals'有2列,'name'和'total',而Bill总共有203,那么为了将Bill的总数移到204,我会使用什么SQL语句?

a_h*_*ame 169

UPDATE totals 
   SET total = total + 1
WHERE name = 'bill';
Run Code Online (Sandbox Code Playgroud)

如果你想确保当前值确实是203(并且不会意外地再次增加它),你还可以添加另一个条件:

UPDATE totals 
   SET total = total + 1
WHERE name = 'bill'
  AND total = 203;
Run Code Online (Sandbox Code Playgroud)

  • @ Stew-au:******不是***在varchar列中存储数字.从长远来看,这会给你带来麻烦.使用整数(或bigint或任何合适的)但不使用字符数据类型. (29认同)
  • 单个语句在关系数据库中始终是原子的.但是,在提交事务之前,运行更新不会阻止其他人_read_旧值 (8认同)
  • 这个语句是原子的还是我需要悲观地锁定表先写入?(我担心的是,在分配总数和总数的总数+ 1之间,已经对表进行了一些写作.) (4认同)
  • 我试图增加 **非整数** 数据类型并得到:`错误:运算符不存在:字符变化 + 整数第 2 行:SET 总计 = 总计 + 1` 通过将值转换为整数来解决,如下所示`SET Total =总计::int + 1` (3认同)
  • 有关upsert的信息,请参见https://dba.stackexchange.com/questions/161127/column-reference-is-ambiguous-when-upserting-element-into-table (2认同)