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)이 아니라 최종 결과에 참여한 행에 대해서만 값을 증가시킨다.
먼저, 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;
content read_count
===================================
'text...' 0
예와 같이 SELECT 문에 INCR 함수를 사용함으로써 해당 컬럼 값은 read_count + 1이 된다. 결과는 다음과 같은 SELECT 문을 통해 확인해 볼 수 있다.
SELECT content, read_count FROM board WHERE id = 1;
content read_count
===================================
'text...' 1