DBMS (MySQL)/DBMS (Oracle)

[DB] 시퀀스(SEQUENCE)

(งᐛ)ว 2023. 10. 19. 23:05
728x90

시퀀스(SEQUENCE)

CREATE SEQUENCE 시퀀스명;

 

오라클 데이터베이스에서 특정 규칙에 맞는 연속숫자를 생성하는 객체 

예를들면, 회원가입시 가입자들에게 또는 게시판의 게시글에 순차적으로 번호를 부여할 수 있다. 

 

시퀀스 옵션 

1씩 증가 : INCREMENT BY 1; 

1부터 카운트 : START WITH 1; 

최소값 : MINVALUE 1;

최대값 : MAXVALUE 100;

20개의 인덱스공간 확보 : CACHE 20;

1개의 인덱스공간 확보 : NOCACHE;

 

시퀀스 주의점 

CACHE 옵션을 사용하면 속도증가를 위해 SEQUENCE 번호를 여러개씩 메모리에 올려놓고 작업을 하게되는데

이러한 경우 DB를 중지시키거나 전원이 OFF 되는 경우 메모리에 있던 번호가 삭제되기 때문에

1,2... 순으로 나오다가 22부터 나올 수 있는 부작용이 존재함  (CACHE 20으로 가정할 때) 

 


 

--테이블 생성하기

CREATE TABLE PERSON(

IDX NUMBER,

NAME VARCHAR2(200),

AGE NUMBER);

 

 

--시퀀스 생성하기

CREATE SEQUENCE PERSON_SEQ;

 

 

--데이터 추가할 때 IDX에 시퀀스 값 적용하기

INSERT INTO PERSON VALUES (PERSON_SEQ.NEXTVAL,'홍길동',30);

INSERT INTO PERSON VALUES (PERSON_SEQ.NEXTVAL,'김길동',20);

INSERT INTO PERSON VALUES (PERSON_SEQ.NEXTVAL,'이길동',10);

INSERT INTO PERSON VALUES (PERSON_SEQ.NEXTVAL,'최길동',15);

 

SELECT * FROM PERSON;

 

 

--현재 시퀀스값 확인(마지막 시퀀스값 반환)

SELECT PERSON_SEQ.CURRVAL FROM DUAL; --4

 

 

--시퀀스 값 초기화하기

--시퀀스를 삭제하고 (DROP SEQUENCE 시퀀스명;) 재생성하는 것이 가장 좋지만 권한이 없다면 삭제불가

--현재 시퀀스 값만큼 INCREMENT를 뺀다.

ALTER SEQUENCE PERSON_SEQ INCREMENT BY -4; 

 

SELECT PERSON_SEQ.NEXTVAL FROM DUAL; --1

 

 

 

728x90

'DBMS (MySQL) > DBMS (Oracle)' 카테고리의 다른 글

[DB] NULL과 NVL  (1) 2023.10.19
[DB] PL/SQL, 프로시저(Procedure), IF문  (0) 2023.10.18
[DB] VIEW  (1) 2023.10.18
[DB] 서브쿼리  (1) 2023.10.17
[DB] ROLLUP과 CUBE  (0) 2023.10.17