ChatGPT解决这个技术问题 Extra ChatGPT

在 Postgres 中增加一个值

我对postgres有点陌生。我想在 postgres 表的字段中取一个值(它是一个整数)并将其加一。例如,如果表 'totals' 有 2 列,'name' 和 'total',而 Bill 总共有 203,我将使用什么 SQL 语句来将 Bill 的总数移动到 204?


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

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

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

我试图增加 non-integer 数据类型并得到:ERROR: operator does not exist: character varying + integer LINE 2: SET total = total + 1通过将值转换为像这样的整数来解决SET total = total::int + 1
@Stew-au:不要将数字存储在 varchar 列中。从长远来看,这会给你带来麻烦。使用整数(或 bigint 或任何合适的),但不要使用字符数据类型。
这个语句是原子的还是我需要先悲观地锁定表以进行写入? (我担心的是,在分配总计和获取总计 + 1 的总计之间,已经对表格进行了一些写入。)
单个语句在关系数据库中始终是原子的。但是,在提交事务之前,运行更新不会阻止其他人读取旧值
对于 upsert,请参阅 dba.stackexchange.com/questions/161127/…