Zwiększ wartość w Postgres


108

Jestem trochę nowy w postgres. Chcę wziąć wartość (która jest liczbą całkowitą) w polu w tabeli postgres i zwiększyć ją o jeden. Na przykład, jeśli tabela „sumy” miała 2 kolumny, „imię” i „suma”, a Bill miał w sumie 203, jakiej instrukcji SQL użyłbym, aby przenieść sumę Billa do 204?

Odpowiedzi:


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

Jeśli chcesz się upewnić, że aktualna wartość to rzeczywiście 203 (i nie zwiększyć jej przypadkowo), możesz również dodać kolejny warunek:

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

1
Próbowałem zwiększyć niecałkowity typ danych i otrzymałem: ERROR: operator does not exist: character varying + integer LINE 2: SET total = total + 1 Rozwiązany przez rzutowanie wartości jako liczby całkowitej w ten sposóbSET total = total::int + 1
Stew-au

33
@ Stew-au: Czy nie przechowywać liczb w kolumnach varchar. Na dłuższą metę sprawi ci to kłopoty. Użyj liczby całkowitej (lub biginta lub innego odpowiedniego), ale nie używaj znakowego typu danych.
a_horse_with_no_name

4
Czy to stwierdzenie jest niepodzielne, czy też potrzebowałbym pesymistycznego zablokowania tabeli w pierwszej kolejności? (Obawiam się, że pomiędzy przypisywaniem sumy a pobieraniem sumy dla sumy + 1 do tabeli zostało
napisane

9
W relacyjnej bazie danych pojedyncza instrukcja jest zawsze niepodzielna. Jednak uruchomienie aktualizacji nie uniemożliwi innym odczytywania starych wartości, dopóki transakcja nie zostanie
zatwierdzona

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.