시퀀스(Sequence) 생성 및 사용법

m_seo.log·2022년 11월 26일
1

Oracle

목록 보기
1/1
post-thumbnail

📌 시퀀스(Sequence)

  • 유일한 값을 생성해주는 오라클 객체이다.
  • 일련번호, 자동증가 값을 생성한다.
  • 시퀀스는 독립적으로 테이블과 별개로 동작한다.
  • 모든 DBMS에서 사용하는 것은 아니다.
  • 시퀀스는 메모리에 cache하여 성능을 향상 시킬 수 있다.

보통 시퀀스를 사용하는 부분은 테이블에서 기본키(Primary Key)를 생성하여 사용하기 위해 사용한다. 기본키다 보니 시퀀스의 숫자를 자동으로 증가시켜 중복이 안되는 고유키로 사용하는 것이다.

📌 시퀀스 구문

CREATE SEQUENCE 스키마명.시퀀스명
	   INCREMENT BY 1		 --> 증가값(1씩 증가)
       START WITH 1			 --> 시작값		
       MINVALUE 1			 --> 최솟값
       MAXVALUE 1000		 --> 최댓값
       NOCYCLE				 --> 최댓값 도달시 시작값 부터 다시 반복
       NOCACHE				 --> CACHE를 사용할지 여부
       NOORDER;				 --> 요청 순서대로 값을 생성할지 여부
  • INCREMENT BY : 시퀀스 실행 시 증가시킬 값
  • START WITH : 시퀀스의 시작값(MINVALUE와 같거나 커야한다.)
  • MINVALUE : 시퀀스가 시작되는 최솟값
  • MAXVALUE : 시퀀스가 끝나는 최댓값
  • NOCYCLE|CYCLE : NOCYCLE(반복안함), CYCLE(시퀀스의 최댓값에 도달 시 최솟값 1부터 다시시작)
  • NOCACHE|CACHE : NOCACHE(사용안함), CACHE(캐시를 사용하여 미리 값을 할당해 놓아서 속도가 빠르며, 동시 사용자가 많을 경우 유리)
  • NOORDER|ORDER : NOORDER(사용안함), ORDER(요청 순서로 값을 생성하여 발생 순서를 보장하지만 조금의 시스템 부하가 있다.)

📌 시퀀스 생성

CREATE SEQUENCE emp_seq
       INCREMENT BY 1
       START WITH 1
       MINVALUE 1
       MAXVALUE 9999
       NOCYCLE
       NOCACHE
       NOORDER;

위의 시퀀스는 1부터 시작하여 9999까지 1씩 증가한다.

📌 시퀀스 사용

SELECT emp_seq.NEXTVAL
  FROM dual

시퀀스명.NEXTVAL을 사용하여 일렬번호를 생성할 수 있다.
시퀀스를 실행할 때마다 값이 증가하니 주의해야 한다.
(증가된 값은 다시 내릴 수 없다.)

📌 시퀀스 수정

ALTER SEQUENCE emp_seq INCREMENT BY 2

시퀀스 증가값을 1에서 2로 변경

ALTER SEQUENCE emp_seq MAXVALUE 99999

시퀀스 최댓값을 9999에서 99999로 변경

  • START WITH는 변경이 불가하며, 이 외에는 모두 변경이 가능하다.
  • MINVALUE를 바꿀때, 현재값이랑 동일하게 바꿀경우 에러
    (MINVALUE cannot be made to exceed the current value)가
    발생할 수 있어 현재 값 부터 초기화 해준뒤에 사용해야 한다.

📌 시퀀스 검색

SELECT * FROM NAME_SEQUENCES;

현재 계정의 모든 시퀀스의 데이터를 전부 보여준다.

📌 시퀀스 삭제

DROP SEQUENCE emp_seq

시퀀스 값을 초기화 하기 위해서는 시퀀스를 삭제 후 다시 생성하거나, INCREMENT BY 값을 마이너스로 수정하여 감소시킬 값만큼 실행해야 한다.


📌 시퀀스 적용

  • 테이블 생성
CREATE TABLE MEMBER_seq(
  NO NUMBER PRIMARY KEY, -- 기본키(시퀀스 적용할 컬럼)
  NAME VARCHAR2(10) NOT NULL,
  PHONENUMBER VARCHAR2(20) NOT NULL
);

시퀀스를 테이블에 적용하기 위해서는 INSERT문을 이용해서 데이터를 입력하는 곳에 "시퀀스명.NEXTVAL"를 입력한다.(시퀀스는 대부분 INSERT 문과 사용된다.

  • 데이터 추가
INSERT INTO MEMBER_seq
VALUES(NO_SEQ.NEXTVAL, 'JOKER', '01012345678');

INSERT INTO MEMBER_seq
VALUES(NO_SEQ.NEXTVAL, 'BATMAN', '01012340987');

INSERT INTO MEMBER_seq
VALUES(NO_SEQ.NEXTVAL, 'Quinn', '01010041004');
  • MEMBER_seq 테이블 검색
SELECT * FROM MEMBERINFO;
  • 현재 시퀀스 값 검색
SELECT NO_SEQ.CURRVAL FROM DUAL;

시퀀스를 적용하여 데이터를 입력하면 자동적으로 값이 증가되면서 저장되는 것을 알 수 있다. NEXTVAL는 현재 시퀀스 값의 다음 값을 반환하고, CURRVAL는 현재 시퀀스 값을 반환한다.

  • 시퀀스 수정
ALTER SEQUENCE NO_SEQ
  MAXVALUE 1000;
  • 시퀀스 수정 결과 검색
SELECT SEQUENCE_NAME, MAX_VALUE 
FROM USER_SEQUENCES;
  • 시퀀스 삭제
DROP SEQUENCE NO_SEQ;
  • 시퀀스 삭제 결과 확인
SELECT SEQUENCE_NAME FROM USER_SEQUENCES ;
  • 최종 테이블 검색
SELECT * FROM MEMBER_seq;

시퀀스를 삭제하여도 이미 입력한 데이터는 영향을 받지 않는다.

profile
기억도 기록도

0개의 댓글