Purple Bobblehead Bunny

Database

[OracleDB] 시퀀스(Sequence)

준영어린이 2022. 5. 25. 20:53

 

시퀀스(Sequence)

자동으로 순차적으로 증가하는 순번을 반환하는 데이터베이스 객체

보통 PK값에 중복값을 방지하기 위해 사용 한다. 

게시판에 글이 하나 추가가 될 때 마다, 글 번호(Primary key)가 생겨야 한다.

100번까지 글 번호가 생성되어 있다면, 다음 글이 추가 될 때 마다 번호 101로 하나의 row를 생성해야 하는데,

이 때 그 숫자를 받으려면 +1을 하는 로직을 넣어줘야 하는데 시퀀스를 사용하면 데이터베이스에 row가

추가 될 때 마다 자동으로 +1을 시켜줘서 편리하다.

 

-- 사용법

create sequence [시퀀스명]
increment by [증감숫자] -- 증감숫자가 양수면 증가, 음수면 감소 디폴트는 1
start with[시작숫자]    -- 시작숫자의 디폴트값은 증가일 때 MINVALUE 감소일 때 MAXVALUE
nominvalue or minvalue [최솟값]
-- nominvalue : 디폴트 값 설정, 증가일 때 1, 감소일 때 -1028
-- minvalue : 최솟값 설정, 시작숫자와 작거나 같아야 하고
                                         maxvalue보다 작아야 함
nomaxvalue or maxvalue [최댓값]
-- nomaxvalue : 디폴트값 설정, 증가일 때 1027,감소 일 때 -1
-- maxvalue   : 최댓값 설정, 시작숫자와 같거나 커야하고 minvalue보다 커야함

cycle or nocycle 
-- cycle 설정시 최대값에 도달하면 최솟값부터 다시 시작 nocycle 설정시 최댓값 생성 시 시퀀스 생성중지

cache or nocache 
-- cache 설정시 메모리에 시퀀스 값을 할당하고 nocache 설정시 시퀀스값을 메모리에 할당하지 않음
-- 예제

create sequence ex_seq -- 시퀀스 이름 ex_seq
increment by 1 -- 증감숫자 1
start with 1   -- 시작숫자 1
minvalue 1     -- 최소값 1
maxvalue 1000  -- 최대값 1000
nocycle        -- 순환하지 않음
cache;         -- 메모리에 시퀀스값 미리할당


-- 시퀀스 확인
select * from ex_seq;

1부터 시작 해 1씩 증가하며 시작값은 1부터 1000까지 순번을 자동하는 시퀀스이다.

 

 

 

-- 예제

-- 시퀀스 생성
create sequence tmp_seq start with 3
increment by 1
maxvalue 1000
cycle
nocache;

-- 데이터를 넣을 tmp 테이블 생성
create table tmp(board_num number(19,6) not null);

-- 시퀀스 삽입
insert into tmp(board_num) values(tmp_seq.NEXTVAL);
insert into tmp(board_num) values(tmp_seq.NEXTVAL);
insert into tmp(board_num)values(tmp_seq.NEXTVAL);

-- 넣었던 데이터를 select 문으로 확인

select * from tmp;

사진과 같이 3부터 시작해 4,5,6 값이 순차적으로 insert 된 것을 확인할 수 있다. 

NEXTVAL을 사용하면 해당 시퀀스에서 다음 순번 값을 자동으로 가져온다.

 

-- 시퀀스 수정

alter sequence [시퀀스명]
increment by [증가값]
nominvalue or minvalue [최솟값]
nomaxvalue or maxvalue [최대값]
cycle or nocycle [사이클 설정 여부]
cache or no nocache [캐시 설정 여부]

-- 예제

alter sequence ex_seq
increment by 2
minvalue 2
maxvalue 10000
cycle
nocache;

시퀀스는 DDL문이다 --> ALTER문으로 수정 가능 하지만, 시작값은 수정이 불가능하다.

 

 

-- 시퀀스 조회
select * from user_sequences;

-- 시퀀스 삭제
drop sequence ex_seq;

'Database' 카테고리의 다른 글

[MySQL] 사용자 정의 변수  (0) 2023.02.03
[OracleDB] JOIN  (0) 2022.05.25
[OracleDB] 제약조건  (0) 2022.05.21
[OracleDB] SELECT  (0) 2022.05.15
[OracleDB] SQL 종류 (DDL.DML.DCL)  (0) 2022.05.14