Tingkatkan nilai di Postgres

108

Saya sedikit baru mengenal postgres. Saya ingin mengambil nilai (yang merupakan integer) di bidang dalam tabel postgres dan menaikkannya satu per satu. Misalnya jika tabel 'total' memiliki 2 kolom, 'nama' dan 'total', dan Bill memiliki total 203, apa pernyataan SQL yang akan saya gunakan untuk memindahkan total Bill ke 204?

hebat
sumber

Jawaban:

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

Jika Anda ingin memastikan nilai saat ini benar-benar 203 (dan tidak meningkatkannya secara tidak sengaja) Anda juga dapat menambahkan ketentuan lain:

UPDATE totals 
   SET total = total + 1
WHERE name = 'bill'
  AND total = 203;
seekor kuda tanpa nama
sumber
1
Saya mencoba untuk meningkatkan tipe data non-integer dan mendapatkan: ERROR: operator does not exist: character varying + integer LINE 2: SET total = total + 1 Dipecahkan dengan memberikan nilai sebagai integer seperti iniSET total = total::int + 1
Stew-au
33
@ Stew-au: Do tidak menyimpan nomor di kolom varchar. Itu akan memberimu masalah dalam jangka panjang. Gunakan integer (atau bigint atau apapun yang cocok) tapi jangan gunakan tipe data karakter.
a_horse_with_no_name
4
Apakah pernyataan ini atomic atau apakah saya perlu kunci pesimistis untuk menulis terlebih dahulu? (Ketakutan saya adalah bahwa di antara menugaskan total dan pengambilan total untuk total + 1 beberapa tulisan telah dilakukan ke tabel.)
miho
9
Pernyataan tunggal selalu atom dalam database relasional. Namun menjalankan pembaruan tidak akan mencegah orang lain membaca nilai lama sampai transaksi Anda dilakukan
a_horse_with_no_name
3
Untuk upsert lihat dba.stackexchange.com/questions/161127/…
iElectric