2012-04-19 7 views
57

私はポストグレースに少し新しくなりました。私は、postgresテーブルのフィールドに値(整数)をとり、1だけインクリメントしたいと考えています。たとえば、 'totals'テーブルに2つのカラム 'name'と 'total'があり、Billの合計が203だった場合、Billの合計を204に移動するために使用するSQL文は何でしょうか?Postgresで値をインクリメント

答えて

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

あなたは現在の値が実際に203であることを確認してください(と誤って再びそれを増加させない)にしたい場合は、また別の条件を追加することができます。

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

私は**非整数をインクリメントしようとしていました**データ型と取得中: 'ERROR:演算子は存在しません:文字可変+整数 LINE 2:SET合計=合計+1 ' このような値を整数としてキャストして解決します。SET total = total :: int + 1 ' –

+19

@ Stew-au:varcharカラムに数字を格納しないでください***。それはあなたに長期的にトラブルを与えるでしょう。整数(またはbigintなど)を使用しますが、文字データ型は使用しないでください。 –

+2

この文はアトミックであるか、最初に書き込みのためにテーブルを悲観的にロックする必要がありますか? (私の恐怖は、合計を割り当てることと、合計+1のために合計を取り出すことの間に、何らかの書き込みが行われたことです。) – miho

関連する問題