Postgres'te bir değeri artırın


108

Postgres konusunda biraz yeniyim. Postgres tablosundaki bir alanda bir değer (tamsayı olan) almak ve onu bir arttırmak istiyorum. Örneğin, 'toplamlar' tablosunda 'ad' ve 'toplam' olmak üzere 2 sütun varsa ve Bill'in toplamı 203 olsaydı, Bill'in toplamını 204'e taşımak için kullanacağım SQL ifadesi ne olurdu?

Yanıtlar:


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

Mevcut değerin gerçekten 203 olduğundan emin olmak istiyorsanız (ve yanlışlıkla tekrar yükseltmiyorsanız) başka bir koşul da ekleyebilirsiniz:

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

1
Tamsayı olmayan veri türünü artırmaya çalışıyordum ve şunu elde ediyordum : ERROR: operator does not exist: character varying + integer LINE 2: SET total = total + 1 Değeri bu şekilde tamsayı olarak çevirerek çözüldüSET total = total::int + 1
Stew-au

33
Yahni-au @: Do not varchar sütunlarında numaralarını saklayın. Bu uzun vadede size sorun çıkarır. Bir tamsayı (veya bigint veya uygun olanı) kullanın, ancak bir karakter veri türü kullanmayın.
a_horse_with_no_name

4
Bu ifade atomik mi yoksa önce yazabilmek için karamsar masayı kilitlemem gerekir mi? (Benim korkum, toplam atama ve toplam + 1 toplamı getirme arasında masaya bir miktar yazı yazılmasıdır.)
miho

9
İlişkisel bir veritabanında tek bir ifade her zaman atomiktir. Ancak güncellemeyi çalıştırmak, işleminiz tamamlanana kadar başkalarının eski değerleri okumasını engellemeyecektir
a_horse_with_no_name

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.