데이터베이스에서 시퀀스(Sequence)란?

**시퀀스(Sequence)**는 데이터베이스에서 고유한 숫자 값을 자동으로 생성하는 객체입니다. 주로 기본 키(Primary Key)나 고유한 ID 값을 생성할 때 사용됩니다.

✅ 시퀀스의 주요 특징

  1. 자동 증가 (Auto Increment)
    • 시퀀스는 호출할 때마다 정해진 규칙에 따라 숫자를 증가시킵니다.
  2. 중복 방지
    • 같은 시퀀스를 여러 번 호출해도 중복된 값이 발생하지 않습니다.
  3. 독립적인 객체
    • 특정 테이블에 종속되지 않고 독립적으로 동작할 수 있습니다.

🔹 시퀀스 사용 예시 (Oracle & PostgreSQL 기준)

1️⃣ 시퀀스 생성

아래 예제는 1부터 시작하여 1씩 증가하는 시퀀스를 생성하는 SQL 문입니다.

sql
복사편집
CREATE SEQUENCE user_id_seq START WITH 1 -- 1부터 시작 INCREMENT BY 1 -- 1씩 증가 NOCACHE -- 미리 생성해두는 값 없음 (성능 최적화 옵션) NOCYCLE; -- 최대값 도달 시 다시 1로 돌아가지 않음

2️⃣ 시퀀스에서 값 가져오기 (NEXTVAL 사용)

  • 시퀀스를 호출하면 다음 숫자가 반환됩니다.
  • Oracle과 PostgreSQL에서 사용 가능
sql
복사편집
SELECT NEXTVAL('user_id_seq');

📌 결과 예시

실행 횟수반환 값 (NEXTVAL)
1회 실행 1
2회 실행 2
3회 실행 3

3️⃣ 시퀀스를 사용하여 테이블에 값 삽입

시퀀스를 활용하여 테이블에 새로운 데이터를 삽입할 수 있습니다.

sql
복사편집
INSERT INTO users (id, name) VALUES (NEXTVAL('user_id_seq'), '홍길동'); INSERT INTO users (id, name) VALUES (NEXTVAL('user_id_seq'), '이순신');

📌 결과 예시 (users 테이블 조회)

idname
1 홍길동
2 이순신

4️⃣ 현재 시퀀스 값 확인 (CURRVAL 사용)

  • 가장 최근에 할당된 값을 가져오려면 CURRVAL을 사용합니다.
sql
복사편집
SELECT CURRVAL('user_id_seq');

📌 예제 결과 (이전에 NEXTVAL을 2번 실행했을 경우)

복사편집
2

주의: CURRVAL은 NEXTVAL을 최소 1회 실행한 세션에서만 사용할 수 있습니다.


5️⃣ 시퀀스 값 초기화 또는 변경

  • 특정 값으로 초기화하려면 ALTER SEQUENCE 문을 사용합니다.
sql
복사편집
ALTER SEQUENCE user_id_seq RESTART WITH 100;

이제 NEXTVAL('user_id_seq')를 실행하면 100부터 증가합니다.


🔹 MySQL에서 시퀀스를 구현하는 방법

MySQL에서는 **시퀀스 객체가 없으므로 AUTO_INCREMENT**를 사용하여 유사한 기능을 구현합니다.

sql
복사편집
CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) );

이제 데이터를 삽입하면 id 값이 자동 증가합니다.

sql
복사편집
INSERT INTO users (name) VALUES ('홍길동'); INSERT INTO users (name) VALUES ('이순신');

📌 결과 (users 테이블 조회)

idname
1 홍길동
2 이순신

✅ 시퀀스를 사용할 때 주의할 점

  1. 중복 방지 용도로만 사용
    • 시퀀스는 단순히 고유한 값을 생성할 뿐, 순차적 정렬을 보장하지 않습니다.
  2. 롤백해도 값이 되돌아가지 않음
    • INSERT 후 ROLLBACK을 해도 증가된 시퀀스 값은 사라지지 않습니다.
  3. 서버 간 동기화 문제
    • 여러 서버에서 시퀀스를 공유하면 동기화 문제(중복 또는 충돌)가 발생할 수 있습니다.

📝 요약 정리

개념설명예제
시퀀스 생성 시퀀스 객체를 만들고 숫자 자동 증가 설정 CREATE SEQUENCE user_id_seq START WITH 1 INCREMENT BY 1;
값 가져오기 NEXTVAL을 사용하여 다음 숫자 조회 SELECT NEXTVAL('user_id_seq');
CURRVAL 현재 시퀀스 값을 확인 SELECT CURRVAL('user_id_seq');
시퀀스 변경 특정 값으로 다시 시작 ALTER SEQUENCE user_id_seq RESTART WITH 100;
MySQL 대체 방법 AUTO_INCREMENT로 자동 증가 컬럼 설정 CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY);

데이터베이스에서 시퀀스는 유일한 ID 값을 자동 생성하는 데 유용하며, 특히 Oracle과 PostgreSQL에서 많이 사용됩니다. MySQL에서는 AUTO_INCREMENT로 동일한 기능을 구현할 수 있습니다.

추가 질문이 있으면 알려주세요!

반응형

+ Recent posts