Câu hỏi Tăng giá trị trong Postgres


Tôi là một chút mới để postgres. Tôi muốn lấy một giá trị (là một số nguyên) trong một trường trong một bảng postgres và tăng nó bằng một. Ví dụ, nếu bảng 'tổng số' có 2 cột, 'tên' và 'tổng', và Bill có tổng cộng là 203, thì câu lệnh SQL nào tôi muốn sử dụng để chuyển tổng số của Bill là 204?


64
2018-04-19 17:16


gốc




Các câu trả lời:


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

Nếu bạn muốn đảm bảo giá trị hiện tại thực sự là 203 (và không vô tình tăng nó một lần nữa), bạn cũng có thể thêm một điều kiện khác:

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

127
2018-04-19 17:20



Tôi đã cố gắng để tăng không nguyên datatype và nhận được:ERROR: operator does not exist: character varying + integer LINE 2: SET total = total + 1  Được giải quyết bằng cách truyền giá trị dưới dạng số nguyên như thế này SET total = total::int + 1 - Stew-au
@ Stew-au: Làm không phải lưu trữ số trong cột VARCHAR. Điều đó sẽ gây rắc rối cho bạn trong thời gian dài. Sử dụng một số nguyên (hoặc bigint hoặc bất cứ điều gì là phù hợp) nhưng không sử dụng một kiểu dữ liệu ký tự. - a_horse_with_no_name
Tuyên bố này có phải là nguyên tử hay tôi sẽ cần bi quan để khóa bảng viết trước? (Nỗi sợ của tôi là ở giữa việc ấn định tổng số và lấy tổng số cho tổng số + 1 một số văn bản đã được thực hiện cho bảng.) - miho
Một câu lệnh đơn luôn luôn là nguyên tử trong một cơ sở dữ liệu quan hệ. Tuy nhiên việc chạy bản cập nhật sẽ không ngăn người khác đọc hiểu các giá trị cũ cho đến khi giao dịch của bạn được thực hiện - a_horse_with_no_name
Và làm thế nào nó sẽ được cho upsert? Cauz nếu tôi cố gắng sử dụng total = total + EXCLUDED.total nó hiển thị lỗi: L ERI: tham chiếu cột "tổng" không rõ ràng ở ký tự XYZ. - Lucas