MySQL에서 SELECT 쿼리를 실행하면서 행마다 1씩 증가하는 카운터를 표시하고 싶다면, 사용자 정의 변수(user-defined variable)를 활용하면 됩니다. 핵심은 쿼리 실행 전에 변수를 선언하고 초기화한 뒤, SELECT 문 안에서 해당 변수의 값을 하나씩 증가시키는 것입니다.
기본 문법
증분 카운터를 만드는 기본적인 문법은 다음과 같습니다.
set @변수명=0; select 컬럼명, @변수명:=@변수명+1 as 별칭 from 테이블명;
예제 테이블 생성
실제 동작을 확인하기 위해 먼저 간단한 테이블을 만들어 보겠습니다.
mysql> create table incrementCounterDemo -> ( -> Name varchar(100) -> ); Query OK, 0 rows affected (1.01 sec)
샘플 데이터 입력
INSERT 명령어를 사용해 몇 개의 레코드를 추가합니다.
mysql> insert into incrementCounterDemo values('John');
Query OK, 1 row affected (0.18 sec)
mysql> insert into incrementCounterDemo values('Carol');
Query OK, 1 row affected (0.20 sec)
mysql> insert into incrementCounterDemo values('David');
Query OK, 1 row affected (0.14 sec)
mysql> insert into incrementCounterDemo values('Mike');
Query OK, 1 row affected (0.21 sec)
mysql> insert into incrementCounterDemo values('Bob');
Query OK, 1 row affected (0.12 sec)
mysql> insert into incrementCounterDemo values('Sam');
Query OK, 1 row affected (0.16 sec)입력된 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from incrementCounterDemo;
실행 결과는 다음과 같습니다.
+-------+ | Name | +-------+ | John | | Carol | | David | | Mike | | Bob | | Sam | +-------+ 6 rows in set (0.00 sec)
카운터 변수 초기화
이제 카운터로 사용할 변수를 0으로 초기화합니다.
mysql> set @counter=0; Query OK, 0 rows affected (0.00 sec)
증분 카운터 조회하기
초기화가 완료되면 SELECT 문에서 @counter:=@counter+1 형태로 변수 값을 증가시키며 각 행에 순번을 부여할 수 있습니다.
mysql> select Name, -> @counter:=@counter+1 as IncrementingValuebyOne -> from incrementCounterDemo;
실행 결과를 보면 각 행마다 값이 1씩 증가하는 것을 확인할 수 있습니다.
+-------+------------------------+ | Name | IncrementingValuebyOne | +-------+------------------------+ | John | 1 | | Carol | 2 | | David | 3 | | Mike | 4 | | Bob | 5 | | Sam | 6 | +-------+------------------------+ 6 rows in set (0.00 sec)
참고 사항
사용자 정의 변수 방식은 MySQL 5.x 버전까지 널리 사용되었지만, 공식적으로 권장되지 않는 패턴이기도 합니다. MySQL 8.0 이상을 사용한다면 윈도우 함수인 ROW_NUMBER()를 활용하는 것이 더 안전하고 표준적입니다.
select Name, row_number() over() as IncrementingValuebyOne from incrementCounterDemo;
두 방식 모두 동일하게 1부터 시작하는 순번을 생성하지만, 윈도우 함수 방식은 쿼리 최적화와 유지보수 측면에서 더 유리합니다. 기존 시스템 호환성이 필요하다면 변수 방식을, 새로 개발하는 환경이라면 ROW_NUMBER() 사용을 권장합니다.