본문 바로가기
Back-End/Database

[SQL] 시퀀스(sequence)

by 찐코딩 2021. 10. 5.

시퀀스(sequence)

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

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

 

가령, 메모장에 메모가 하나 추가될때마다 글번호(PK)가 생겨야 한다고 가정했을 때

만약 5번까지 메모 번호가 생성되어있다면 그 다음 글이 추가가 되었을 경우 글 번호가 6으로 하나의 ROW를 생성해주어야 할 것 이다.

이때 6이라는 숫자를 얻으려면 기존 글번호중 가장 큰 값에 +1을 하는 로직을 어딘가에 넣어야하는데

시퀀스를 사용하면 이러한 로직이 필요없이 데이터베이스에 ROW가 추가될때마다 자동으로 +1을 시켜주어 매우 편리하다,

 

형식) 
      create sequence 시퀀스이름 
      start with n (시작번호 설정 - 기본적으로 기본값은 1) 
      increment by n (증가 번호 설정 - 기본적으로 증가값은 1) 
      maxvalue n  (시퀀스 최대 번호 설정) 
      minvalue n  (시퀀스 최소 번호 설정) 
      cache / nocache (시퀀스의 값을 빠르게 설정하기 위해 캐쉬 메모리 사용여부)
      
      
/*

1) cache : 시퀀스를 빨리 제공하기 위해서 미리 캐쉬 메모리에 시퀀스를 넣어 두고
 준비하고 있다가 시퀀스 작업이 필요할 때 사용. 
 디폴트로는 20개의 시퀀스를 캐쉬 메모리에 보관하게 됨. 
 하지만 만약 시스템이 비정상적으로 종료를 하게 되면 
 캐쉬 메모리에 존재하던 남은 시퀀스 번호는 사라지게 됨. 
 
 2) nocache : cache 기능을 사용하지 않겠다는 의미
 
*/


-- 시퀀스의 다음 시퀀스 번호를 확인하고 싶은 경우
SELECT MEMO_SEQ.NEXTVAL FROM DUAL;

 

-- 메모 테이블 생성
CREATE TABLE memo (
    bunho number(5) primary key,    -- 메모 글번호
    title varchar2(100) not null,   -- 메모 글제목
    writer varchar2(50) not null,   -- 메모 글 작성자
    content varchar2(500) not null,     -- 메모 글 내용
    regdate date   -- 메모 글 작성일
);

-- 메모 작성 시 사용할 시퀀스를 만들어 보자
create sequence memo_seq	--시퀀스이름 memo_seq
start with 1		-- 시작 숫자
increment by 1	-- 증감 숫자
NOCACHE;	-- CACHE 사용하지 않음.

-- memo 테이블에 데이터를 저장
insert into memo
values (memo_seq.nextval, '메모1','홍길동','홍길동님 글', sysdate);
insert into memo
values (memo_seq.nextval, '메모2','이순신','장군님 글',sysdate);
insert into memo
values (memo_seq.nextval, '메모3','유관순','유관순님 글',sysdate);
insert into memo
values (memo_seq.nextval, '메모4','김아무개','김아무개님 글',sysdate);
insert into memo
values (memo_seq.nextval, '메모5','이아무개','이아무개님 글',sysdate);

--넣었던 데이터를 SELECT문으로 확인
select * from memo;

위와같이 1, 2, 3, 4 ,5이라는 BUNHO값이 순차적으로 INSERT된것을 볼 수 있다

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

댓글