데이터베이스에서 기본 키나 일련번호를 자동 생성할 때 많이 사용하는 기능이 바로 시퀀스(Sequence) 입니다. Oracle과 Tibero는 모두 시퀀스를 지원하며, AUTO_INCREMENT 대신 활용할 수 있습니다. 이번 글에서는 시퀀스 생성, NEXTVAL·CURRVAL 사용법, 실무에서의 주의사항까지 한 번에 정리해드립니다.
시퀀스(Sequence)란?
시퀀스는 데이터베이스 객체 중 하나로, 중복되지 않는 숫자 값을 순차적으로 생성합니다.
주로 PRIMARY KEY
나 ID 컬럼
자동 증가 값으로 사용합니다.
- MySQL:
AUTO_INCREMENT
- Oracle/Tibero:
SEQUENCE + NEXTVAL
Oracle에서 시퀀스 사용법
시퀀스 생성
CREATE SEQUENCE user_seq
START WITH 1
INCREMENT BY 1
NOCACHE
NOCYCLE;
SQLSTART WITH
: 최초 시작값 (기본 1)INCREMENT BY
: 증가 단위 (기본 1)NOCACHE
: 메모리에 미리 값 캐싱하지 않음NOCYCLE
: 최대값 이후 다시 시작하지 않음
값 조회
SELECT user_seq.NEXTVAL FROM dual; -- 다음 값 생성
SELECT user_seq.CURRVAL FROM dual; -- 마지막 생성 값
SQLINSERT 활용
INSERT INTO users (id, name)
VALUES (user_seq.NEXTVAL, '홍길동');
SQLTibero에서 시퀀스 사용법
Tibero도 Oracle과 거의 동일한 문법을 지원합니다.
시퀀스 생성
CREATE SEQUENCE tb_user_seq
START WITH 1000
INCREMENT BY 10
CACHE 20
NOCYCLE;
SQL값 조회
SELECT tb_user_seq.NEXTVAL FROM dual;
SELECT tb_user_seq.CURRVAL FROM dual;
SQLINSERT 활용
INSERT INTO tb_users (id, username)
VALUES (tb_user_seq.NEXTVAL, 'KimTae');
SQL실무 활용 팁
- 캐시(Cache) 옵션:
CACHE n
을 주면 성능은 향상되지만 DB 재시작 시 값이 건너뛰는 경우가 있음 → 금융/정산 데이터는NOCACHE
권장 - PK 충돌 방지: 여러 테이블에서 공용 시퀀스를 쓰지 말 것
- 삭제 후 재시작: 시퀀스는 기본적으로 값이 되돌아가지 않음 →
ALTER SEQUENCE
또는 재생성이 필요 - 대량 데이터 입력:
NEXTVAL
을 한 번 호출 후 루프에서 사용 가능 (성능 최적화)
마무리
Oracle과 Tibero에서 시퀀스는 안정적으로 유니크한 번호를 자동 생성해주는 중요한 기능입니다.
실무에서는 NEXTVAL
을 활용해 PK 값을 생성하고, 캐시/순환 옵션을 상황에 맞게 조정하는 것이 핵심입니다.