본문 바로가기

DataBase

데이터베이스 시퀀스[정의][cmd 시퀀스 생성, 수정, 삭제]

시퀀스(뜻: 순서, 연속)



데이터베이스에서는 "순차적으로 증가하며 감소되는 값을 제공"하는 데이터베이스 객체이다.


일반적으로 시퀀스는 테이블의 기본키를 생성(중복값 x) ->쿼리만으로 충분히 구현 가능


테이블 내의 유일한 숫자를 자동으로 생성 즉, 사용자가 직접 값을 생성하는 부담감을 줄임






'시퀀스 형식'



[start with n] 시작할 값을 정한다.


[INCREMENT BY N ] 연속적인 시퀀스 번호의 증가치를 지정할 때 사용

MINVALUE = 양수 MAXVALUE = 음수


[NOMINVALUE | MINVALUE n]

NOMINVALUE = 최솟값을 제한이 없음, 디폴트 값 MINVALUE = 최솟값을 설정

NOMAXVALUE를 지정하면 ASCENDING(오름차순) 순서일 경우에는 1

DECENDING 순서일 경우에는 10(26)승로 설정


[NOMAXVALUE | MAXVALUE n] 

NOMAXVALUE = 최댓값을 제한이 없음, 디폴트 값 MAXVALUE = 최댓값을 설정

NOMAXVALUE를 지정하면 ASCENDING(오름차순) 순서일 경우에는 10(27)

DECENDING 순서일 경우에는 1로 설정

<!--[if !supportEmptyParas]--> <!--[endif]-->

[cycle | nocycle] 

cycle 시퀀스가 최대값 도달 후 다시 처음부터 시퀀스 생성

nocycle은 죄대값에 도달해도 다시 시퀀스를 생성하지 못한다.

<!--[if !supportEmptyParas]--> <!--[endif]-->

[cache n | nocache]

cache n은 메모리상에서 시퀀스 값을 관리하도록 하는 것으로 기본 값을 20입니다.

nocache는 메모리상에서 시퀀스를 관리하지 않습니다.



'시퀀스 사용'



[시퀀스 이름, currval] currval은 시퀀스에서 마지막으로 생성한 번호를 반환(현재 값)

currval의 경우, 시퀀스를 생성하고 바로 사용하면 번화가 만들어진 적이 없으므로 오류가 발생.


[시퀀스 이름, nextval] nextval은 다음 번호를 생성(다음 값)

시퀀스에서 생성한 순번을 사용한 insert문 실행 즉, 초기값을 설정해준다.



nextval, currval을 사용할 수 있는 경우

- 서브쿼리가 아닌 select문

- insert문의 select절

- insert문의 value절

- update문의 set절


nextval, currval을 사용할 수 없는 경우

- view의 select절

- Distinct 키워드가 있는 select문

- group by, having, order by 절이 있는 select문
- select, delete, update의 서브 쿼리

- create table alter table 명령의 default 값




'시퀀스 생성'



우선 테이블을 먼저 생성해준다. 지금 예제에서는 'student'








시퀀스 생성







시퀀스 생성 확인 예제 1







시퀀스 생성 확인 예제 2







테이블에 데이터 추가



현재 시퀀스의 값을 확인


select stu.seq.currval from dual;




'시퀀스 수정'


alter문을 이용하여 시퀀스 수정이 가능하다. create문의 구조와 거의 동일하다.


* 주의 사항 *


start 값은 수정이 불가능하기 때문에 시작 값을 시 지정하려면 삭제 후 생성을 해야한다.




'시퀀스 삭제'


drop sequence stu_sequences;


삭제 확인


select * from user_sequence;


테이블 검색


select * from student;