DATABASE(oracleDB 11g)/SQL

[SQL]SEQUENCE(시퀀스)의 기초

SEUNGSAMI 2019. 2. 14. 10:04

SEQUENCE(시퀀스)의 기초


시퀀스는 정수 값을 생성해주는 데이터베이스의 객체이다.

이 객체는 공유할 수 있고, 고유 번호를 자동적으로 생성할 수 있다.

-> Primary key값중 정수값을 생성하는데 이용할 수 있다.


<User Data 와 Dictionary Data>

User Data : 사용자의 데이터가 저장하는건 실제 디스크에 공간을 받아야하는것

Dictionary Data : 딕셔너리데이터는 그러한 사용자 데이터를 유지보수 하기 위해 공유되는 별도의 공간을 가진다.


시퀀스는 Dictionary Data에 저장된다.

즉 별도의 저장공간이 필요하지 않는다.

생성해 놓으면 만들어진 SEQUENCE를 통해서 여러가지 SEQUENCE의 속성만 가지고 있으면 된다.


시퀀스를 생성하는 구문은 다음과 같다.

1
2
3
4
5
6
7
CREATE SEQUENCE sequence
[INCREMENT BY n]
[START WITH n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE n | NOCACHE}];
cs


구문 

설명 

sequence

시퀀스의 이름

INCREMENT BY n

시퀀스 번호 사이의 간격(기본값 1)

START WITH n

생성되는 시퀀스의 첫번째 번호

MAXVALUE n

시퀀스의 최대값

NOMAXVALUE

오름차순 시퀀스의 경우 최대값 10^27 내림차순의 경우 -1(기본값)

MINVALUE n

시퀀스의 최소값

NOMINVALUE

 오름차순 시퀀스의 최소값을 1, 내림차순시퀀의 경우 -(10^26)

CYCLE | NOCYCLE

최대 혹은 최소값에 도달후 시퀀스를 계속 생성할 지를 결정 

CACHE n | NOCACHE

OrACLE 서버가 메모리에 미리 할당하고 저장하는 값의 개수를 지정(기본값은 20)



다음 예시를 보자.

1
2
3
4
5
CREATE SEQUENCE TEST_SEQ
START WITH 1
MAXVALUE 999999
NOCACHE
NOCYCLE;
cs


autoincrement 대신

1
SELECT TEST_SEQ.NEXTVAL FROM DUAL;
cs

를 사용한다.


현재 번호를 확인할때는

1
SELECT TEST_SEQ.CURVAL FROM DUAL;
cs


sequence를 확인할때

1
SELECT * FROM USER_SEQUENCES;
cs

를 사용한다.


시퀀스를 수정할 경우 다음의 구문을 사용한다.

1
2
3
4
5
6
ALTER SEQUENCE sequence
[INCREMENT BY n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE n | NOCACHE}];
cs

이때 주의할 점은 START한 번호는 바꿀 수가 없으므로 결국 다시 시퀀스를 만들어야한다.


주의할 점으로는 시퀀스는 한번 사용하면, 다시 쓸 수 없다. ROLLBACK을 포함해서 적용이 안된다. 그러므로, 데이터 값이 많을경우 중간에 없는 번호가 있을 수도 있다.


SQL을 배운지 얼마 되지 않아 잘못된 내용이 있을 수 있습니다. 틀린 내용이있다면, 댓글로 달아주세요.

'DATABASE(oracleDB 11g) > SQL' 카테고리의 다른 글

[SQL]동의어 기초  (0) 2019.02.14
[SQL]INDEX의 기초  (0) 2019.02.14
[SQL]EXISTS 의 보충  (0) 2019.02.11
[SQL]서브쿼리(SUBQUERY)의 종류  (0) 2019.02.08
[SQL]이름 지정 규칙  (0) 2019.02.08