Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 일련번호 삽입하는 방법 – 세션 변수 활용 가이드

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 속성을 사용하는 것이 적절합니다.

상황에 맞는 방식을 선택하여 활용하시기 바랍니다.