데이터베이스에서 시퀀스(Sequence)란?
**시퀀스(Sequence)**는 데이터베이스에서 고유한 숫자 값을 자동으로 생성하는 객체입니다. 주로 기본 키(Primary Key)나 고유한 ID 값을 생성할 때 사용됩니다.
✅ 시퀀스의 주요 특징
- 자동 증가 (Auto Increment)
- 시퀀스는 호출할 때마다 정해진 규칙에 따라 숫자를 증가시킵니다.
- 중복 방지
- 같은 시퀀스를 여러 번 호출해도 중복된 값이 발생하지 않습니다.
- 독립적인 객체
- 특정 테이블에 종속되지 않고 독립적으로 동작할 수 있습니다.
🔹 시퀀스 사용 예시 (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 | 이순신 |
✅ 시퀀스를 사용할 때 주의할 점
- 중복 방지 용도로만 사용
- 시퀀스는 단순히 고유한 값을 생성할 뿐, 순차적 정렬을 보장하지 않습니다.
- 롤백해도 값이 되돌아가지 않음
- INSERT 후 ROLLBACK을 해도 증가된 시퀀스 값은 사라지지 않습니다.
- 서버 간 동기화 문제
- 여러 서버에서 시퀀스를 공유하면 동기화 문제(중복 또는 충돌)가 발생할 수 있습니다.
📝 요약 정리
개념설명예제
| 시퀀스 생성 | 시퀀스 객체를 만들고 숫자 자동 증가 설정 | 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로 동일한 기능을 구현할 수 있습니다.
추가 질문이 있으면 알려주세요!
반응형
'SQL > ORACLE' 카테고리의 다른 글
| [ORACLE]오라클의 **함수(Function)** (0) | 2025.04.04 |
|---|---|
| [ORACLE]오라클의 **DML (Data Manipulation Language)** (0) | 2025.04.04 |
| [Oracle]4️⃣ 전문가 단계 (대용량 데이터 처리 및 관리) (0) | 2025.03.30 |
| [Oracle]3️⃣ 고급 단계 (PL/SQL 및 성능 튜닝) (0) | 2025.03.30 |
| [Oracle]2️⃣ 중급 단계 (고급 SQL 및 최적화) (1) | 2025.03.30 |