SEQUENCE
✒️ 2025-05-28 17:34 내용 수정
참고 자료 : 해피밀세트's 오라클 SQL - 시퀀스(Sequence) 사용하기, 젠트's 오라클 시퀀스(Sequence) 생성 및 사용법(자동증가, 일련번호), 코딩팩토리's 오라클 시퀀스(Sequence) 사용법 총정리(생성, 조회, 수정, 삭제) 등, MS CREATE SEQUENCE(Transact-SQL)
자동으로 일련번호를 생성하는 데이터베이스 객체
- Oracle에는 SEQUENCE가 존재하지만, MySQL에는 SEQUENCE가 없어 이를 테이블, procedure, function을 조합해 구현하는 방법들이 있다.
CREATE SEQUENCE 시퀀스명
START WITH 시작숫자 -- 시작숫자 부터 카운팅
INCREMENT BY 증감숫자 -- 증감할 숫자
MINVALUE 최솟값 -- 최솟값
MAXVALUE 최댓값 -- 최댓값
[CYCLE|NOCYCLE] -- 최댓값 도달 시 시작숫자부터 반복 여부
[ORDER|NOORDER] -- 요청 순서대로 값을 생성할지 여부
[CACHE 숫자|NOCACHE]; -- 미리 공간을 할당할지 여부. 사용 시 기본값 20
- CACHE를 사용하면 미리 INDEX 공간을 확보하기 때문에 여러 사용자가 접속해도 프로그램 속도가 느려지지 않는다.
SEQUENCE 접근
- 시퀀스명.CURRVAL을 이용해 시퀀스의 현재 순번을 확인할 수 있으며, 여러 번 실행해도 순번이 변하지 않는다.
- 시퀀스명.NEXTVAL을 이용해 시퀀스의 다음 순번을 생성 및 확인할 수 있지만, SEQUENCE를 실행할 때마다 값이 증가하기 때문에 주의해야 한다.
-- 시퀀스의 현재 순번 가져오기
SELECT 시퀀스명.CURRVAL FROM DUAL;
-- 시퀀스의 다음 순번 가져오기
SELECT 시퀀스명.NEXTVAL FROM DUAL;
SEQUENCE 수정
- START WITH 를 제외한 모든 옵션을 변경할 수 있다.
ALTER SEQUENCE 시퀀스명 변경할내용1 변경할내용2;
- 여러 개의 옵션 변경 예시
ALTER SEQUENCE 시퀀스명 INCREMENT BY 1 MINVALUE 1 MAXVALUE 300;
SEQUENCE 삭제
DROP SEQUENCE 시퀀스명;
SEQUENCE 예시
- Oracle 기준으로 작성
-- SEQUENCE 생성
CREATE SEQUENCE SQ_TEST
START WITH 0 -- 0 부터 시작
INCREMENT BY 1 -- 1씩 증가
MINVALUE 0 -- 최솟값 0
MAXVALUE 100 -- 최댓값 100
NOCYCLE -- 순회 없음
CACHE 20; -- 캐시 20
-- 테이블 생성
CREATE TABLE "CHARACTER" (
IDX NUMBER,
NAME VARCHAR2(100),
JOB VARCHAR2(100)
);
-- 테이블에 데이터 추가
INSERT INTO "CHARACTER" VALUES(SQ_TEST.NEXTVAL, '아이언클래드', '전사');
INSERT INTO "CHARACTER" VALUES(SQ_TEST.NEXTVAL, '스파이더맨', '기자');
INSERT INTO "CHARACTER" VALUES(SQ_TEST.NEXTVAL, '에지오', '암살자');
-- 테이블 데이터 확인
SELECT * FROM "CHARACTER";
- IDX에 1부터 3까지 순차적으로 숫자가 추가된 것을 확인할 수 있다.