Erhöhen Sie einen Wert in Postgres


108

Ich bin ein bisschen neu bei Postgres. Ich möchte einen Wert (der eine Ganzzahl ist) in ein Feld in einer Postgres-Tabelle nehmen und um eins erhöhen. Wenn zum Beispiel die Tabelle 'Summen' zwei Spalten hätte, 'Name' und 'Summe', und Bill insgesamt 203 hätte, welche SQL-Anweisung würde ich verwenden, um Bills Summe auf 204 zu verschieben?

Antworten:


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

Wenn Sie sicherstellen möchten, dass der aktuelle Wert tatsächlich 203 beträgt (und ihn nicht versehentlich erneut erhöht), können Sie auch eine weitere Bedingung hinzufügen:

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

1
Ich habe versucht, einen nicht ganzzahligen Datentyp zu erhöhen und Folgendes zu erhalten: ERROR: operator does not exist: character varying + integer LINE 2: SET total = total + 1 Gelöst, indem der Wert wie folgt in eine Ganzzahl umgewandelt wurdeSET total = total::int + 1
Stew-au

33
@ Stew-au: Speichern Sie keine Zahlen in Varchar-Spalten. Das wird Ihnen auf lange Sicht Probleme bereiten. Verwenden Sie eine Ganzzahl (oder Bigint oder was auch immer geeignet ist), aber keinen Zeichendatentyp.
a_horse_with_no_name

4
Ist diese Aussage atomar oder muss ich zuerst die Tabelle für Schreibvorgänge pessimistisch sperren? (Ich befürchte, dass zwischen dem Zuweisen von total und dem Abrufen von total für total + 1 etwas auf den Tisch geschrieben wurde.)
miho

9
Eine einzelne Anweisung ist in einer relationalen Datenbank immer atomar. Das Ausführen des Updates hindert andere jedoch nicht daran , die alten Werte zu lesen , bis Ihre Transaktion festgeschrieben ist
a_horse_with_no_name

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.