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;
먼저, 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);
SELECT content, INCR(read_count) FROM board WHERE id = 1;
결과 값:
'text...' 0
SELECT content, read_count FROM board WHERE id = 1;
결과 값:
'text...' 1