본문 바로가기
Programming/Database

[Database] 시퀀스 , SEQUENCE

by 공부합시다홍아 2023. 12. 12.
 

[Database] 뷰, VIEW

[Database] 제약조건 [Database] Table, 테이블 [Database] 트랜잭션, Transaction https://hong-study.tistory.com/294 트랜잭션 ( Transaction ) ● 논리적인 작업의 단위로, 분리되어서는 안될 작업의 단위이다. ▶ 시작은

hong-study.tistory.com


시퀀스, SEQUENCE

● 자동적으로 고유한 (유일) 번호를 생성한다.
● 공유 가능한 객체이고, 주로 기본 키 값을 생성하기 위해 사용한다.
   → 데이터베이스 객체 보통 PK값에 중복값을 방지하기 위해 사
● 어플리케이션 코드를 대체하고, 메모리 캐쉬(Cache)가 되면 시퀀스 값을  액세스 하는 효율성을 향상시킨다.
● CREATE SEQUENCE 시스템 권한이 있어야 사용 가능하다.

※ 캐쉬 (Cache) : 시퀀스를 빨리 제공하기 위해서 미리 메모리에 CACHE 수량 만큼의 시퀀스를 만들어서 준비
※ 사이클(CYCLE) : 최대값에 도달 했을 때 다시 최소값 부터 시작함.

ⓛ 시퀀스는 테이블의 행에 대한 시퀀스 번호를 자동적으로 생성하기 위해 사용될 수 있다.
② 시퀀스는 사용자가 생성한 데이터베이스 객체이며 여러 사용자가 공유가능하다.
③ 시퀀스의 가장 일반적이고 전형적인 사용은 각 행을 유일하게 구분하는 기본 키 값을 생성하기 위해서이다.
시퀀스 번호는 테이블과 관계없이 생성되고 저장된다.
▶ 동일한 시퀀스는 여러 테이블에 대해 사용될 수 있다.

  • INCREMENT BY : 시퀀스 실행시 증가시킬 값
  • START WITH : 시퀀스의 시작 값 ( ※ MIN_VALUE와 같거나 커야함 )
  • MIN_VALUE : 시퀀스가 시작되는 최솟값
  • MAX_VALUE : 시퀀스가 끝나는 최댓값
  • NOCYCLE | CYCLE
    • NOCYCLE : 반복 하지 않음
    • CYCLE : 시퀀스의 최댓값에 도달시 최솟값 1부터 다시 시작
  • NOCACHE | CACHE
    • NOCACHE : 캐시를 사용하지 않음
    • CACHE : 캐시를 사용하여 미리 값을 할당해 놓아 속도가 빠르며, 동시 사용자가 많을 경우 유리
  • NOORDER | ORDER
    • NOORDER : 순서값 생성 하지 않음
    • ORDER : 요청 순서로 값을 생성하여 발생 순서를 보장하지만 조금의 시스템 부하가 존재
시퀀스 확인
SELECT * FROM USER_SEQUENCES;

NEXTVAL 
다음 사용 가능한 시퀀스 리턴한다.
● 시퀀스가 참조될 때마다 다른 사용자에게 조차도 유일한 값을 반환한다.

CURRVAL 
현재 시퀀스 값을 리턴한다.
● CURRVAL이 참조되기 전에 NEXTVAL이 먼저 이용되어야 한다.

시퀀스 생성

CREATE SEQUENCE DEPTS_SEQ
    INCREMENT BY 1
    START WITH 1
    MAXVALUE 10
    NOCACHE
    NOCYCLE;

NEXTVAL 확인

SELECT DEPTS_SEQ.NEXTVAL FROM DUAL;

CURRVAL 확인
▶ 반드시 NEXTVAL 확인 이후에만 확인 가능
▶ 한 번 NEXTVAL가 실행되면, 복구는 불가

SELECT DEPTS_SEQ.CURRVAL FROM DUAL;

시퀀스를 이용해 테이블 생성
CREATE TABLE DEPTS(
    DEPT_NO NUMBER(2) CONSTRAINT DEPTS_NO_PK PRIMARY KEY,
    DEPT_NAME VARCHAR2(30),
    DEPT_DATE DATE
);
INSERT INTO DEPTS VALUES (DEPTS_SEQ.NEXTVAL, 'TEST', SYSDATE);
  • NEXTVAL의 특성을 이용하여, 값을 삽입할 수 있다.

시퀀스 수정

위 시퀀스(Sequence)의 최댓값(MAX_VALUE)는 10이다.
시퀀스에 대해 MAXVALUE 한계에 도달한다면, 더 이상 시퀀스 값을 할당 받을 수 없을 것이고,
MAXVALUE를 초과하는 시퀀스를 나타내는 에러를 받을 것이다.
▶ 이를 위한 해결 방법으로는 시퀀스를 계속 사용하기 위해 ALTER SEQUENCE 문장을 사용한다.

ALTER SEQUENCE DEPTS_SEQ MAXVALUE 9999;

 

728x90

'Programming > Database' 카테고리의 다른 글

[Database] 권한 ( Privilege )  (0) 2023.12.13
[Database] INDEX  (0) 2023.12.13
[Database] 뷰, VIEW  (0) 2023.12.12
[Database] 제약조건  (1) 2023.12.12
[Database] Table, 테이블  (1) 2023.12.11