Tăng giá trị trong Postgres


108

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

Câu trả lời:


209
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 lại), 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;

1
Tôi đã cố gắng để tăng phi nguyên datatype và nhận được: ERROR: operator does not exist: character varying + integer LINE 2: SET total = total + 1 giải quyết bằng cách đúc các giá trị là số nguyên như thế nàySET total = total::int + 1
Stew-au

33
@ Stew-au: Đỗ không lưu trữ số liệu trong cột VARCHAR. Điều đó sẽ mang lại cho bạn những rắc rối về lâu dài. Sử dụng số nguyên (hoặc bigint hoặc bất cứ thứ gì phù hợp) nhưng không sử dụng kiểu dữ liệu ký tự.
a_horse_with_no_name

4
Tuyên bố này là nguyên tử hay tôi sẽ cần 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à tìm nạp tổng cộng cho tổng số + 1, một số bài viết đã được thực hiện trên bảng.)
miho

9
Một câu lệnh đơn luôn luôn là nguyên tử trong cơ sở dữ liệu quan hệ. Tuy nhiên chạy bản cập nhật sẽ không ngăn chặn người khác đọc các giá trị cũ cho đến khi giao dịch của bạn là cam kết
a_horse_with_no_name

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.