시퀀스란?
- 유일(UNIQUE)한 값을 생성해주는 오라클 객체이다.
- 시퀀스를 생성하면 기본키와 같이 순차적으로 증가하는 컬럼을 자동적으로 생성 할 수 있다. (오라클 내부 루틴에 의해 생성되거나 증가 또는 감소)
- 보통 PRIMARY KEY 값을 생성하기 위해 사용한다.
- 시퀀스는 테이블과는 독립적으로 저장된고 생성된다. (따라서 여러 테이블에 동일한 시퀀스를 사용할 수 있음)
- 시퀀스 값을 메모리에 캐시하면 액세스 효율이 높아진다.
CREATE SEQUENCE 문법
Oracle DB와 비교했을 때 sequence create 구문은 동일하다.
CREATE SEQUENCE [시퀀스이름]
INCREMENT BY 1
START WITH 1
MAXVALUE 100
CYCLE(또는 NOCYCLE)
CACHE(또는 NOCACHE);
-INCREMENT BY n : 시퀀스 번호 사이의 간격을 지정, 생략 시 1씩 증가
-START WITH n : 생성할 첫번째 시퀀스 번호를 지정, 생략 씨 1부터 시작
-MAXVALUE n : 시퀀스가 생성할 수 있는 최대값을 지정
-MINVALUE n : 시퀀스의 최소값을 지정
-CYCLE, NOCYCLE : 최대값 또는 최소값에 도달한 이휴에도 시퀀스가 계속 값을 생성할지 여부를 결정
-CACHE, NOCACHE : Oracle 서버가 미리 할당하여 메모리에 저장할 값의 개수를 지정 (기본적으로 20개)
시퀀스 사용 - Oracle DB
INSERT INTO [테이블명] VALUES [시퀀스이름.nextval]
-NEXTVAL은 사용 가능한 다음 시퀀스 값을 반환하며, 참조될 때마다 (서로 다른 사용자일지라도) 고유한 값을 반환
-CURRVAL은 현재 시퀀스 값을 반환
-CURRVAL이 값을 포함하려면 먼저 해당 시퀀스에 대해 NEXTVAL이 실행되어야 함
(NEXTVAL을 참조하면 새 시퀀스 번호가 생성되며 현재 시퀀스 번호는 CURRVAL에 위치하게 된다.)
NEXTVAL 및 CURRVAL을 사용 할 수 있는 경우
-서브 쿼리에 속하지 않은 SELECT 문의 SELECT 목록
-INSERT 문에 있는 서브 쿼리의 SELECT 목록
-INSERT 문의 VALUES 절
-UPDATE 문의 SET절
NEXTVAL 및 CURRVAL을 사용할 수 없는 경우
-뷰의 SELECT 목록
-DISTINCT 키워드가 있는 SELECT문
-GROUP BY, HAVING 또는 ORDER BY 절이 있는 SELECT문
-SELECT, DELETE, UPDATE 문의 서브쿼리
-CREATE TABLE 또는 ALTER TABLE문의 DEFAULT 표현식
시퀀스 사용 - MSSQL
INSERT INTO [테이블명] VALUES NEXT VALUE FOR [시퀀스이름]
-시퀀스는 오라클 객체인데 MSSQL에서 오라클과 동일한 방식으로 제공하기 위해 SQL SERVER 2012부터 제공
-생성된 시퀀스는 데이터베이스 > 프로그래밍 기능 > 시퀀스에 존재
>MSSQL에서는 시퀀스 뿐만 아니라 identity도 사용가능
'DATABASE' 카테고리의 다른 글
[MariaDB/Mysql] primary key 설정 (0) | 2021.08.10 |
---|---|
[MariaDB] MariaDB 기본 (0) | 2021.08.09 |
[Oracle] 오라클 데이터베이스 연습문제 (0) | 2021.07.27 |
[MSSQL] 스프링 게시판 만들기에 사용한 쿼리 (0) | 2021.07.25 |
[MSSQL] 자동증가열(identity) 사용법 (0) | 2021.07.16 |
댓글