INCR과 DECR 함수

설명

INCR 함수는 SELECT 절에 포함되어 인자로 주어진 컬럼의 값을 1 증가시켜 주는 기능을 한다. DECR 함수는 해당 컬럼의 값을 1 감소시킨다.

구문

SELECT [ qualifier ] select_expression

[ { TO | INTO } variable [ {, variable }...; ] ]

...;

select_expression :

 *

 table_name. *

 [expression | counter_expression] [ {, expression |

counter_expression}...]

 

counter_expression :

INCR(path_expression)

INCR 함수와 DECR 함수는 '클릭 카운터' 함수로 불리며, 게시판 유형의 웹 서비스에서 게시물의 조회수를 증가시키는데 유용하게 사용될 수 있다. 게시물의 내용을 SELECT하고 곧바로 게시물의 조회수를 UPDATE로 1 증가하는 유형의 시나리오에서 하나의 SELECT 문에 INCR 함수를 사용함으로써 한번에 게시물 내용 조회와 조회수 증가 작업을 수행할 수 있다.

INCR 함수는 인자로 명시된 컬럼 값을 증가시킨다. 단, 인자로는 정수 타입의 숫자형만 올 수 있고, 값이 NULL인 경우 INCR 함수를 수행하여도 값은 NULL을 유지한다. 즉, 값이 설정되어야 INCR 함수를 써서 값을 증가시킬 수 있다. DECR 함수는 인자로 명시된 컬럼 값을 감소시킨다.

SELECT 절에 INCR 함수를 명시한 경우, COUNTER 값을 1 증가하고 질의 결과는 증가하기 전의 값으로 출력한다. 그리고, INCR 함수는 질의 처리 과정에서 참여한 행(tuple)이 아니라 최종 결과에 참여한 행에 대해서만 값을 증가시킨다.

참고 사항

SELECT b.content, INCR(b.read_count) FROM (SELECT * FROM board WHERE id = 1) AS b

SELECT content, INCR(read_count) + 1 FROM board WHERE id = 1;

CREATE TRIGGER event_tr BEFORE UPDATE ON event EXECUTE REJECT;

SELECT INCR(players) FROM event WHERE gender='M';

예제

먼저, board 테이블에는 아래와 같이 3건의 데이터가 입력되었다고 가정한다.

CREATE TABLE board (

id  INT, title  VARCHAR(100), content  VARCHAR(4000), read_count  INT );

INSERT INTO board VALUES (1, 'aaa', 'text...', 0);

INSERT INTO board VALUES (2, 'bbb', 'text...', 0);

INSERT INTO board VALUES (3, 'ccc', 'text...', 0);

다음은 id 값이 1인 데이터의 read_count 컬럼의 값을 INCR 함수로 증가시키는 예이다. 

SELECT content, INCR(read_count) FROM board WHERE id = 1;

=== <Result of SELECT Command in Line 1> ===

 

  content                read_count

===================================

  'text...'                       0

예와 같이 SELECT 문에 INCR 함수를 사용함으로써 해당 컬럼 값은 read_count + 1이 된다. 결과는 다음과 같은 SELECT 문을 통해 확인해 볼 수 있다. 

SELECT content, read_count FROM board WHERE id = 1;

=== <Result of SELECT Command in Line 1> ===

 

  content                read_count

===================================

  'text...'                       1