เพิ่มมูลค่าใน Postgres


109

ฉันเป็นมือใหม่เล็กน้อยสำหรับ postgres ฉันต้องการรับค่า (ซึ่งเป็นจำนวนเต็ม) ในฟิลด์ในตาราง postgres และเพิ่มทีละหนึ่ง ตัวอย่างเช่นถ้าตาราง 'ผลรวม' มี 2 คอลัมน์ 'name' และ 'total' และ Bill มีทั้งหมด 203 คำสั่ง SQL ที่ฉันจะใช้เพื่อย้ายทั้งหมดของ Bill เป็น 204 คืออะไร?

คำตอบ:


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

หากคุณต้องการให้แน่ใจว่าค่าปัจจุบันเป็น 203 (และไม่เพิ่มขึ้นอีกโดยไม่ได้ตั้งใจ) คุณสามารถเพิ่มเงื่อนไขอื่นได้:

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

1
ฉันพยายามเพิ่มประเภทข้อมูลที่ไม่ใช่จำนวนเต็มและรับ: ERROR: operator does not exist: character varying + integer LINE 2: SET total = total + 1 แก้ไขได้โดยการแคสต์ค่าเป็นจำนวนเต็มแบบนี้SET total = total::int + 1
Stew-au

33
@ สตู-au: Do ไม่เก็บตัวเลขในคอลัมน์ varchar นั่นจะทำให้คุณมีปัญหาในระยะยาว ใช้จำนวนเต็ม (หรือ bigint หรืออะไรก็ได้ที่เหมาะสม) แต่อย่าใช้ประเภทข้อมูลอักขระ
a_horse_with_no_name

4
คำพูดนี้เป็นปรมาณูหรือฉันต้องการล็อคตารางในแง่ร้ายเพื่อเขียนก่อน? (ความกลัวของฉันคือระหว่างการกำหนดผลรวมและการดึงผลรวมทั้งหมด + 1 มีการเขียนบางส่วนในตาราง)
miho

9
คำสั่งเดียวเป็นอะตอมเสมอในฐานข้อมูลเชิงสัมพันธ์ อย่างไรก็ตามการรันการอัปเดตจะไม่ป้องกันไม่ให้ผู้อื่นอ่านค่าเดิมจนกว่าธุรกรรมของคุณจะ
เสร็จสิ้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.