Postgres에서 값 증가


108

나는 postgres에 조금 익숙합니다. postgres 테이블의 필드에서 값 (정수)을 가져 와서 1 씩 늘리고 싶습니다. 예를 들어 'totals'테이블에 'name'과 'total'이라는 2 개의 열이 있고 Bill의 합계가 203 인 경우 Bill의 합계를 204로 옮기기 위해 사용할 SQL 문은 무엇입니까?

답변:


209
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
스튜 프

33
스튜 프 @ : 마 하지 VARCHAR 컬럼의 숫자를 저장합니다. 그것은 장기적으로 당신에게 문제를 줄 것입니다. 정수 (또는 bigint 또는 적절한 것)를 사용하되 문자 데이터 유형은 사용하지 마십시오.
a_horse_with_no_name

4
이 문은 원자 적입니까, 아니면 쓰기를 위해 테이블을 비관적으로 잠그어야합니까? (내 두려움은 합계 할당과 합계 + 1에 대한 합계 가져 오기 사이에 테이블에 쓰기가 수행되었습니다.)
miho

9
단일 명령문은 관계형 데이터베이스에서 항상 원자 적입니다. 그러나 다른 사람에 방해가되지 않는 업데이트를 실행 읽기 트랜잭션 때까지 이전 값은 최선을 다하고 있습니다
a_horse_with_no_name

3
upsert는 dba.stackexchange.com/questions/161127/…을 참조하십시오 .
iElectric
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.