Oracle이나 PostgreSQL과 달리 MySQL은 별도의 CREATE SEQUENCE 객체를 제공하지 않습니다. 대신 컬럼에 AUTO_INCREMENT 속성을 지정하면, 레코드가 삽입될 때마다 자동으로 1씩 증가하는 고유 번호를 부여할 수 있습니다. 기본적으로 값은 1부터 시작하며, 새로운 행이 추가될 때마다 하나씩 증가합니다.
1. AUTO_INCREMENT가 설정된 테이블 생성
먼저 CREATE TABLE 문을 사용해 시퀀스 역할을 할 테이블을 생성합니다. 쿼리는 다음과 같습니다.
mysql> CREATE table SequenceDemo
-> (
-> SequenceId int auto_increment,
-> primary key(SequenceId)
-> );
Query OK, 0 rows affected (1.22 sec)
여기서 SequenceId 컬럼에 auto_increment를 지정하고, 기본 키(primary key)로 설정하여 중복 없는 고유한 값이 저장되도록 했습니다.
2. 레코드 삽입하기
테이블 생성이 완료되면 INSERT 명령으로 레코드를 삽입할 수 있습니다. AUTO_INCREMENT 컬럼은 값을 직접 입력하지 않아도 자동으로 채워지므로, 아래와 같이 빈 값으로 삽입하면 됩니다.
mysql> INSERT into SequenceDemo values();
Query OK, 1 row affected (0.19 sec)
mysql> INSERT into SequenceDemo values();
Query OK, 1 row affected (0.14 sec)
mysql> INSERT into SequenceDemo values();
Query OK, 1 row affected (0.10 sec)
mysql> INSERT into SequenceDemo values();
Query OK, 1 row affected (0.12 sec)
mysql> INSERT into SequenceDemo values();
Query OK, 1 row affected (0.09 sec)
3. 삽입된 데이터 확인하기
레코드 삽입 후 SELECT 문으로 결과를 조회해 보겠습니다.
mysql> SELECT * from SequenceDemo;
실행 결과는 다음과 같습니다.
+------------+
| SequenceId |
+------------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
+------------+
5 rows in set (0.00 sec)
레코드가 삽입될 때마다 시퀀스 값이 1부터 시작해 순차적으로 1씩 증가한 것을 확인할 수 있습니다.
4. ALTER TABLE로 시퀀스 시작값 변경하기
시퀀스의 시작 값을 임의로 지정하고 싶다면 ALTER 명령어를 사용하면 됩니다. 기본 구문은 다음과 같습니다.
alter table yourTableName auto_increment=Somevalue;
위 구문을 실제로 적용해 시퀀스 값을 500으로 설정해 보겠습니다.
mysql> alter table SequenceDemo auto_increment = 500;
Query OK, 0 rows affected (0.17 sec)
Records: 0 Duplicates: 0 Warnings: 0
5. 변경된 시퀀스 값 확인하기
설정 변경 후에는 새로 삽입되는 레코드들이 500부터 번호를 받게 됩니다. 레코드를 추가로 삽입해 보겠습니다.
mysql> INSERT into SequenceDemo values();
Query OK, 1 row affected (0.15 sec)
mysql> INSERT into SequenceDemo values();
Query OK, 1 row affected (0.15 sec)
mysql> INSERT into SequenceDemo values();
Query OK, 1 row affected (0.05 sec)
전체 레코드를 SELECT 문으로 조회합니다.
mysql> SELECT * from SequenceDemo;
실행 결과는 아래와 같습니다.
+------------+
| SequenceId |
+------------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 500 |
| 501 |
| 502 |
+------------+
8 rows in set (0.00 sec)
출력 결과에서 알 수 있듯이, 기존 5개 레코드 이후에 삽입된 데이터는 시퀀스 ID가 500부터 시작하여 1씩 증가합니다.
참고: 마지막 삽입된 시퀀스 값 확인하기
방금 삽입한 레코드의 시퀀스 값이 필요하다면 LAST_INSERT_ID() 함수를 사용하면 편리합니다. 해당 함수는 현재 세션에서 가장 최근에 생성된 AUTO_INCREMENT 값을 반환합니다.
mysql> SELECT LAST_INSERT_ID();
이처럼 MySQL에서는 AUTO_INCREMENT 속성과 ALTER TABLE 구문만으로도 Oracle의 시퀀스와 유사한 기능을 손쉽게 구현할 수 있습니다.