시퀀스(Sequence)
- 유일한 값을 생성해주는 오라클 객체이다.
- 일련번호, 자동증가 값을 생성한다.
- 시퀀스는 독립적으로 테이블과 별개로 동작한다.
- 모든 DBMS에서 사용하는 것은 아니다.
- 시퀀스는 메모리에 Cache하여 성능을 향상 시킬 수 있다.
보통 시퀀스를 사용하는 부분은 테이블에서 기본키(Primary key)를 생성하여 사용하기 위해 사용하고는 한다.
기본키다 보니 시퀀스의 숫자를 자동으로 증가시켜 중복이 안되는 고유키로 사용하는 것이다.
이제 시퀀스 생성 / 수정 / 삭제 에 대해 하나하나 알아가 보도록 하자.
1. 시퀀스 생성 (CREATE SEQUENCE)
- 시퀀스 역시 마찬가지로 CREATE 구문을 사용하여 간단하게 생성이 가능하다.
▷ 구문
CREATE SEQUENCE [시퀀스 이름]
[START WITH 시작번호]
[INCREMENT BY 증가단위]
[MAXVALUE 최대값]
[MINVALUE 최소값]
[CYCLE | NOCYCLE]
[CACHE | NOCACHE]
위 구문 처럼 CREATE SEQUENCE 를 사용하여 시퀀스를 생성하면 되며,
"시퀀스 이름" 빼고 나머지는 생략이 가능하니 필요에 따라 사용하면 된다.
각 옵션에 대해 알아보도록 하자. (각 옵션 별 생략 시 기본값(DEFAULT) 가 존재한다.)
START WITH는 말 그대로 지정한 번호부터 시퀀스를 시작하겠다는 의미이다. (생략 시 DEFAULT : 1)
INCREMENT BY는 증가단위를 의미하는데, 지정한 값 만큼 시퀀스가 증가한다. (생략 시 DEFAULT : 1)
MAXVALUE는 말 그대로 시퀀스의 최대값을 의미한다. (생략 시 DEFAULT : 해당 오라클 버전에서의 시퀀스 최대값)
MINVALUE는 MAXVALUE의 반대로 시퀀스의 최소값을 의미한다. (생략 시 DEFAULT : 1)
CYCLE | NOCYCLE은 시퀀스의 순환여부를 지정하는 것이다. (생략 시 DEFAULT : NOCYCLE)
순환여부가 무슨 의미인가 하면 시퀀스가 MAXVALUE에 도달했을때 다시 시작값으로 돌아갈 것인지에 대한 설정이며, 순환여부를 CYCLE로 설정할 경우 개발할때 테이블의 기본값을 (시퀀스 + 날짜) 조합으로 지정하여 사용 하는 경우도 있다.
CACHE | NOCACHE는 시퀀스 값을 메모리에 할당할 것인지에 대한 설정이다. (생략 시 DEFAULT : CACHE 20)
▷ 사용 예제
--시퀀스 생성
CREATE SEQUENCE testSeq
START WITH 1 INCREMENT BY 1
MAXVALUE 5000
MINVALUE 1
CYCLE
CACHE 20;
2. 시퀀스 수정 (ALTER SEQUENCE)
- 수정 역시 마찬가지로 ALTER 구문을 사용하여 수정이 가능하다.
▷ 구문
ALTER SEQUENCE [시퀀스 이름]
[INCREMENT BY 증가단위]
[MAXVALUE 최대값]
[MINVALUE 최소값]
[CYCLE | NOCYCLE]
[CACHE | NOCACHE]
CREATE 구문과 다르게 옵션이 하나 빠졌는데, ALTER 구문에서는 START WITH 옵션 값은 수정이 불가능하다.
수정을 할 때 하나 알아둬야 할 점이 있는데, MINVALUE를 바꿀때 현재값이랑 동일하게 바꿀경우 아래와 같은 에러가 발생하니 현재 값 부터 초기화 해준뒤에 사용해 주도록 하자. (현재 값 초기화는 본문 하단의 링크를 참조)
[MINVALUE cannot be made to exceed the current value]
그리고 혹시나 지금까지 생성된 시퀀스가 궁금하다면 데이터를 조회할 수 있다.
* 시퀀스 검색
-- 현재 계정의 모든 시퀀스의 데이터를 전부 보여줍니다.
SELECT * FROM USER_SEQUENCES;
▷ 사용 예제
--시퀀스 수정
ALTER SEQUENCE testSeq
INCREMENT BY 1
MAXVALUE 100000
NOCYCLE
CACHE 50;
3. 시퀀스 삭제 (DROP SEQUENCE)
- 이 역시 DROP 구문을 사용하면 끝난다.
▷ 구문
DROP SEQUENCE [시퀀스 이름];
▷ 사용 예제
--시퀀스 삭제
DROP SEQUENCE testSeq;
여기까지 시퀀스의 생성, 수정, 삭제 하는 방법에 대해 알아봤으며
추가적으로 시퀀스의 VALUE에 대한 제어는 아래 게시글을 통해 접해보자.
댓글