-
[데이터베이스] 시퀀스 정리개발/데이터베이스 2021. 12. 5. 23:57
시퀀스란
시퀀스는 테이블 내의 유일한 숫자를 자동으로 생성하는 자동 번호 발생기로 생각하면 편합니다.
예를 들어 기본키를 정해줄 때 시퀀스를 사용함으로써 사용자가 설정해야하는 번거로움을 줄여줄 수 있습니다.
오라클, SQL Server에서 사용되어지며 이 글에서는 오라클을 중점적으로 알아 보겠습니다.
mysql등에는 시퀀스가 존재하지 않습니다.(시퀀스처럼 기능을 사용하는 방법이 있긴 하지만 다음에 다뤄 보겠습니다)-형식- CREATE SEQUENCE [시퀀스명] START WITH [시작숫자] -- 시작숫자에 적은 값이 디폴트값이 된다. 증가일때 MINVALUE, 감소일때 MAXVALUE INCREMENT BY [증감숫자] --증감숫자가 양수면 증가 음수면 감소 디폴트는 1 MINVALUE OR NOMINVALUE [최솟값] -- NOMINVALUE : 디폴트값 설정, 오름차순일때 1, 내림차순일때 10^26 -- MINVALUE : 최소값 설정, 시작숫자와 작거나 같아야하고 MAXVALUE보다 작아야함 MAXVALUE OR NOMINVALUE [최대값] -- NOMAXVALUE : 디폴트값 설정, 오름차순일때 10^27, 내림차순일때 -1 -- MAXVALUE : 최대값 설정, 시작숫자와 같거나 커야하고 MINVALUE보다 커야함 CYCLE OR NOCYCLE --CYCLE 설정시 최대값에 도달하면 최소값부터 다시 시작 NOCYCLE 설정시 최대값 생성 시 시퀀스 생성중지 CACHE OR NOCACHE --CACHE 설정시 메모리에 시퀀스 값을 미리 할당하고 NOCACHE 설정시 시퀀스값을 메로리에 할당하지 않음
-예제- CREATE SEQUENCE EX_SEQ --시퀀스이름 EX_SEQ INCREMENT BY 1 --증감숫자 1 START WITH 1 --시작숫자 1 MINVALUE 1 --최소값 1 MAXVALUE 1000 --최대값 1000 NOCYCLE --순한하지않음 CACHE; --메모리에 시퀀스값 미리할당
CURRVAL, NEXTVAL
시퀀스의 현재 값을 알아내기 위해서 CURRVAL를 사용하고, 다음 값을 알아내기 위해서는 NEXTVAL를 사용합니다. CURRVAL는 'CURRENT VALUE'의 약어로서 현재 값을 반환합니다.
NEXTVAL는 'NEXT VALUE'의 약어로서 다음 값이란 의미를 가지며, 현재 시퀀스 값의 다음 값을 반환합니다.NEXTVAL, CURRVAL을 사용할 수 있는 경우
- 서브 쿼리가 아닌 SELECT문
- INSERT 문의 SELECT 절
- INSERT 문의 VALUE 절
- UPDQTE 문의 SET 절
NEXTVAL, CURRVAL을 사용할 수 없는 경우
- VIEW의 SELECT 절
- DISTINCT 키워드가 있는 SELECT 문
- GROUP BY, HAVING, ORDER BY 절이 있는 SELECT 문
- SELECT, DELETE, UPDATE의 서브 쿼리
- CREATE TABLE, ALTER TABLE 명령의 DEFAULT 값
시퀀스 사용 예시
INSERT INTO CUSTOMER(CUST_SEQ, CUST_NAME, CUST_PHONE, CUST_ADDR) VALUES(CUSTOMER_SEQ.NEXTVAL, '홍길동', '010-0000-0000', '서울'); INSERT INTO CUSTOMER(CUST_SEQ, CUST_NAME, CUST_PHONE, CUST_ADDR) VALUES(CUSTOMER_SEQ.NEXTVAL, '이순신', '010-1111-1111', '부산'); INSERT INTO CUSTOMER(CUST_SEQ, CUST_NAME, CUST_PHONE, CUST_ADDR) VALUES(CUSTOMER_SEQ.NEXTVAL, '장보고', '010-2222-2222', '경주');
결과물 시퀀스 수정
ALTER SEQUENCE emp_seq INCREMENT BY 2
시퀀스 삭제
DROP SEQUENCE emp_seq
'개발 > 데이터베이스' 카테고리의 다른 글
[Oracle] Undo(언두)란 (0) 2022.01.03 [데이터베이스] 집합연산자 정리 (0) 2021.12.16 [데이터베이스] 트리거 정리 (0) 2021.11.26 [데이터베이스] 인덱스 정리 (0) 2021.11.21 [데이터베이스] 정규화(Normalization) 정리 (0) 2021.11.15