DB/구자료

시퀀스 (SEQUENCE)

쿠키는고양이 2022. 8. 28. 15:18

 

시퀀스란 순차적으로 일을 처리한다는 의미를 가지고 있다. SQL 에서도 자동으로 순차적으로 일정한 크기로

증감하는 변수를 만들 수 있는데 이를 시퀀스라 한다.

순차적으로 값이 증감한다면 유일한(UNIQUE) 값을 데이터로 하는 컬럼을 만들 수 있을 것이다. 실제로 시퀀스는

기본키 드 중복되지 않는 값이 들어가는 컬럼에 사용할 수 있다.

 

1. 시퀀스 생성 / 삭제 방법

테이블과 비슷하게 CREATE 문으로 시작한다.

CREATE SEQUENCE [변수명];
 

삭제도 마찬가지로 DROP 문으로 삭제한다.

DROP SEQUENCE [변수명];
 

 

2. 시퀀스 구문에 사용되는 예약어

어떤 컬럼의 값이 일정하게 증감하게 한다는 것은 다음과 같이 조건을 가질 수도 있다.

1) 시작할 크기

2) 증감할 크기

3) 범위

4) 반복 여부

5) 미리 데이터를 조건에 맞춰 생성함.

 

위의 조건들을 예약어로 작성하면 다음과 같다.

CREATE SEQUENCE [변수명]   
 START WITH 1              -- 1 부터 시작
 INCREMENT BY 1;           -- 1 씩 증가
 MAXVALUE 100              -- 100 까지 
 CYCLE                     -- 1~100 을 계속 반복
 CACHE 10;                 -- 10개의 데이터를 위의 조건에 맞춰 미리 생성해 둠.
 

여기서 자주 쓰이는 것은 START WITH와 INCREMENT BY 부분이다.

만약 어떤 테이블 레코드가 100부터 시작하여 99, 98, 97, ..., 1 까지 라면 아래와 같이 작성하면 된다.

CREATE SEQUENCE [변수명]   
 START WITH 100              -- 100 부터 시작
 INCREMENT BY -1;            -- 1 씩 감수
 MAXVALUE 1                  -- 1 까지 
 

※ 시퀀스는 1부터 시작, 1씩 증가를 기본으로 하고 있다. 따라서 아래와 같이 사용하면 자동으로 1부터 1씩 증가

이다.

CREATE SEQUENCE [변수명];
 

 

※ 마지막의 CACHE는 DB의 속도를 위해 임시 테이블에 미리 해당 값의 갯수만큼 값을 생성해두는 것이다.

만약 DB가 속도에 민감한 이슈를 가지고 있을 때 고려하면 된다. (보통은 잘 안씀.)

 

※ CYCLE을 사용하게 되면 당연히 유일한 값을 갖기 위한 시퀀스의 용도가 달라진다.

 

 

 

3. 시퀀스 사용하기

이제 시퀀스를 생성하고 조건을 달았다면 실제로 사용해보자.

사용은 INSERT 문과 함께 사용할 수 있다.

 

만약 [사람] 테이블에 [번호], [이름] 을 갖는다면

CREATE TABLE HUMAN(
H_NO   NUMBER(100),
H_NAME NVARCHAR2(20)
);
 

처럼 나올 것이다. 여기서 번호가 기본키라면 시퀀스를 사용하면 된다.

CREATE TABLE HUMAN(
H_NO   NUMBER(10),
H_NAME NVARCHAR2(20)
);

CREATE SEQUENCE HUMAN_SEQ;  

INSERT INTO HUMAN VALUES (HUMAN_SEQ.NEXTVAL, '홍길동'); 
INSERT INTO HUMAN VALUES (HUMAN_SEQ.NEXTVAL, '고길동'); 

SELECT * FROM HUMAN;
 
 
사진 삭제

실행 결과

위의 코드에서 보면 INSERT 문에서 [HUMAN_SEQ.NEXTVAL] 으로 작성한 곳에 1과 2가 삽입되었다.

HUMAN_SEQ.NEXTVAL 는 현재 시퀀스의 다음 값을 의미한다.

만약 현재 시퀀스 값이 궁금하다면 다음과 같이 쿼리를 작성하면 된다.

SELECT HUMAN_SEQ.CURRVAL FROM DUAL;