MySQL에서는 세션 변수(session variable)를 활용하면 테이블에 일련번호를 간단하게 삽입할 수 있습니다. 별도의 추가 컬럼 설계나 복잡한 로직 없이, 사용자 정의 변수 하나만으로 순차적인 번호를 부여할 수 있다는 점이 큰 장점입니다.
기본 문법
일련번호를 삽입하는 기본적인 문법은 다음과 같습니다.
SELECT @변수명 := 초기값; UPDATE 테이블명 SET 컬럼명 = @변수명 := @변수명 + 증가값;
먼저 SELECT 문으로 세션 변수에 시작 값을 할당하고, 이후 UPDATE 문을 실행할 때마다 변수 값이 지정한 증가 단위만큼 늘어나면서 각 행에 순차적으로 번호가 기록됩니다.
예제 테이블 생성하기
문법을 실제로 이해하기 위해 예제용 테이블을 먼저 만들어 보겠습니다.
mysql> create table SequentialNumberDemo
-> (
-> SequentialNumber int not null
-> );
Query OK, 0 rows affected (0.84 sec)샘플 데이터 삽입
INSERT 명령을 사용해 여러 개의 레코드를 입력합니다.
mysql> insert into SequentialNumberDemo values(100); Query OK, 1 row affected (0.11 sec) mysql> insert into SequentialNumberDemo values(10); Query OK, 1 row affected (0.22 sec) mysql> insert into SequentialNumberDemo values(9); Query OK, 1 row affected (0.15 sec) mysql> insert into SequentialNumberDemo values(60); Query OK, 1 row affected (0.11 sec) mysql> insert into SequentialNumberDemo values(50); Query OK, 1 row affected (0.14 sec) mysql> insert into SequentialNumberDemo values(40); Query OK, 1 row affected (0.13 sec)
현재 데이터 확인
SELECT 문으로 테이블의 전체 레코드를 조회해 보겠습니다.
mysql> select *from SequentialNumberDemo;
실행 결과는 다음과 같습니다.
+------------------+ | SequentialNumber | +------------------+ | 100 | | 10 | | 9 | | 60 | | 50 | | 40 | +------------------+ 6 rows in set (0.00 sec)
출력 결과를 보면 숫자들이 순차적이지 않고 뒤죽박죽 섞여 있는 것을 확인할 수 있습니다. 이제 이 값들을 1부터 시작하는 일련번호로 바꿔 보겠습니다.
일련번호 시작 값 설정
가장 먼저 세션 변수에 시퀀스 시작 값을 할당합니다. 여기서는 0으로 설정합니다.
mysql> select @sequence := 0;
실행 결과입니다.
+---------------+ | @sequence:= 0 | +---------------+ | 0 | +---------------+ 1 row in set (0.03 sec)
UPDATE 문으로 일련번호 부여
이제 UPDATE 쿼리를 실행하여 1부터 시작하는 일련번호를 각 행에 부여합니다.
mysql> update SequentialNumberDemo set SequentialNumber = @sequence := @sequence+1; Query OK, 6 rows affected (0.15 sec) Rows matched: 6 Changed: 6 Warnings: 0
총 6개 행이 매칭되었고, 모두 성공적으로 변경된 것을 확인할 수 있습니다.
최종 결과 검증
테이블을 다시 한번 조회하여 결과를 확인해 보겠습니다.
mysql> select *from SequentialNumberDemo;
실행 결과는 다음과 같습니다.
+------------------+ | SequentialNumber | +------------------+ | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | +------------------+ 6 rows in set (0.00 sec)
모든 행에 1부터 6까지 순차적인 번호가 정상적으로 부여된 것을 확인할 수 있습니다.
정리 및 참고 사항
이처럼 MySQL의 사용자 정의 세션 변수를 활용하면 기존 테이블의 데이터에 손쉽게 일련번호를 부여할 수 있습니다. 다만 몇 가지 유의할 점이 있습니다.
- UPDATE 문 내에서 변수 값을 읽고 동시에 수정하는 방식은 행이 처리되는 순서에 따라 결과가 달라질 수 있으므로, 필요하다면 ORDER BY 절을 함께 사용해 처리 순서를 명시하는 것이 안전합니다.
- MySQL 8.0 이상 환경이라면 윈도우 함수인
ROW_NUMBER()를 사용하는 것이 더 권장되는 방식입니다. 예를 들어SELECT ROW_NUMBER() OVER() AS seq, ...형태로 조회 시점에만 일련번호를 생성할 수도 있습니다. - 테이블에 영구적인 자동 증가 번호가 필요하다면 AUTO_INCREMENT 속성을 사용하는 것이 적절합니다.
상황에 맞는 방식을 선택하여 활용하시기 바랍니다.