티스토리 뷰

 

 

 

 SEQUENCE (시퀀스) 

 

SEQUENCE는 사적적 의미로는 "각각의 독립된 연속성" 이라는 뜻이 있다. 이 뜻 그대로 테이블로 가져오면 아마 독립된 무언가를 만들어 준다는 그런 의미로 해석되어 질 수 있다. 그렇다. 이 SEQUENCE 녀석은 저번 글에서 나왔던 기본키를 대체한다고 생각하면 이해가 쉬울 것이다. 데이터의 값이 겹치지 않게 고유한 값을 번호로 부여하는 것 이게 SEQUENCE이다. 그래서 먼저 다른 Query 문을 작성하기 전에 시퀀스의 정의와 생성하는 법을 정리하고 가보자.

 

- 테이블에서 유일한 값(UNIQUE)을 생성해준다.

- 시퀀스는 순차적으로 값이 증가하는 숫자컬럼을 자동으로 생성한다.

- 보통 기본키에 많이 사용한다.

 

1. SEQUENCE(시퀀스) 생성

 

CREATE  SEQUENCE  SEQ_mogakco_name  INCREMENT  BY  START  WITH  1  NOMAXVALUE  NOCACHE ;

 

CREATE  SEQUENCE  [시퀀스 명]  INCREMENT  BY  [증가시킬 값(수)]   START  WITH  [시작할 값(수)]  [옵션] "

 

시퀀스 생성의 가장 정석인 쿼리문이다. 각각의 명칭들이 무엇을 말하는건지 보자.

 

[시퀀스 용어정리]

 

- CREATE SEQUENCE : 시퀀스를 생성

- INCREMENT BY : 시퀀스 실행시 증가시킬 값 (몇씩 증가시키겠다.)

- START WITH : 시퀀스의 시작값 (몇번째 숫자부터 시작하겠다)

- MAXVALUE/ NOMAXVALUE : 시퀀스가 끝나는 최댓값 / 최댓값을 지정하지 않음

- MINVALUE/ NOMINVALUE : 시퀀스가 시작되는 최솟값 / 최솟값을 지정하지 않음

- CACHE/ NOCACHE : 캐시를 사용하여 미리값을 할당 

 

  => CACHE를 이용하면 속도가 빠르다. 기본값이 20인가 그럴건데, CACHE를 사용하면 매번 SEQUENCE번호를 생성하는것이 아니라 한번에 1~20까지 시퀀스 번호를 생성 후 일을 처리하기 때문에 빠르다. (Shared Pool에 내가 지정한 만큼의 시퀀스가 존재하게 된다.) 하지만 나중에 문제가 생길 수도 있다. 한번에 20개씩 생성했는데 데이터베이스가 갑자기 꺼지거나 하면 다음 SEQUENCE생성시에는 먼저 만들어 놨던 1~20까지 값이 사라지고 21부터 시작이 된다. 즉, 1,2,3,22 이런식으로 증가할 수 도 있다는 말이다. 그래서 교육을 들었을때는 NOCACHE로 옵션을 설정한 뒤 진행하였다.


2. 시퀀스 사용

 

보통 시퀀스는 INSERT할때 사용되거나, 처음부터 기본키의 default값으로 들어가 자동으로 데이터의 순서를 매길때 사용된다. 시퀀스는 이름 뒤에 .NEXTVAL을 붙여서 사용한다.

 

예시1)

 

=>  테이블 생성시에 시퀀스를 기본값으로 설정하고 만드는 방법

 

 

예시2)

 

INSERT INTO MOGAKCO (no ,name , age, region, field, regdate)

VALUES (SEQ_mogakco_name.NEXTVAL, '이름', 31, '지역', '풀스텍', CURRENT DATE);

 

=>  데이터를 추가시 INSERT 쿼리문, VALUES값으로 시퀀스를  쓰는 방법


3. 시퀀스 수정 & 삭제

 

ALTER SEQUENCE SEO_mogakco_name INCREMENT BY 2

 

이렇게 시퀀스의 증가값을 늘린다거나 (1 -> 2)

 

ALTER SEQUENCE SEO_mogakco_name MAXVALUE 10000

 

최댓값을 늘릴 수도 있다.

 

DROP SEQUENCE SEO_mogakco_name

 

삭제 또한 가능하다.

 

하지만 하나 바꿀 수 없는게 있다면  START WITH (몇번 부터 시작...)은 변경할 수 없다


4. 시퀀스 그 외 기능

 

① CURRVAL : 현재 시퀀스값 출력

 

 

.NEXTVAL을 쓰면 하나씩 증가하는 것을 확일 할 수 있다.

 

 

.CURRVAL를 쓰면 현재 시퀀스의 값을 확인할 수 있다.

 

② 시퀀스 값 초기화

 

증가된 시퀀스 값을 버튼이나 쿼리문 하나로 바꿀 수는 없다. 하지만 몇번의 작업을 거치면 마치 초기화 된 것 처럼 만들수가 있다.

 

- 먼저 위에서 썼던 방식으로 CURRVAL를 써서 현재값이 몇인지를 구한다.

 

 

- 현재 시퀀스 숫자를 보면 11인데, 0이 되도록 그 차이만큼 빼준다. ( -11 )

- 그리고 한번 실행을 시킨 후 다시 증가값을 1로 변경하고 실행시켜준다.

 

 

이러면 시퀀스값이 다시 1로 시작하게끔 할 수있다. 꼼수를 쓰는 것 같은 기분도 드는데, 꼼수도 하나의 방법임을 잊지말자.

 

 

[도움받은 사이트]

 

 

[Oracle] 오라클 시퀀스(Sequence) 생성 및 사용법 (자동증가, 일련번호)

오라클에서는 자동 증가 컬럼을 사용할 수가 없다. 다른 DB에서는 컬럼 자체에 옵션이 있으나, 오라클에서는 컬럼의 값을 증가시키기 위해서는 MAX(컬럼) + 1 또는 시퀀스를 사용하여 일련번호를

gent.tistory.com