-Sequence 란?
-Synonym 시넘 이란?
o 자동적으로 순차적인 번호를 생성하고자 할 때 사용한다.
o 기본 키를 생성할 때 주로 사용된다.
o Table에 종속적이지 않으며 여러 사용자에 의해 공유 되어 사용되어진다.
o 메모리에 캐시 형태로 존재하면 Access 효율성을 높일 수 있다.
일반적으로 select max(empno) + 1 from emp
로 고유한 번호를 검색하지만 이렇게 하면 오버헤드가 발생할 여지가 있다.
왜냐하면 최소 몇십만건의 데이터를 하나의 글을 검색하기 위해
select로 전체 검색할 필요는 없다.
그 결과 비효율이 발생한다. 이걸 해결하기 위해서 시퀀스를 쓴다.
그래서 시퀀스를 쓴다.
o 오버헤드가 훨씬 적다
o 전통
ex) 테이블을 하나 만들었는데 . 테이블 이름이 길어서. alias처럼 짧은 이름으로 테이블을 엑세스하게 할 수 있게 한다.
=복잡한 이름을 간단하게 한다.
+사용자에게 위치 투명성을 제공한다.
++ 구루비 보충내용
시퀀스란?
- - 유일(UNIQUE)한 값을 생성해주는 오라클 객체이다.
- - 시퀀스를 생성하면 기본키와 같이 순차적으로 증가하는 컬럼을 자동적으로 생성 할 수 있다.
- - 보통 PRIMARY KEY 값을 생성하기 위해 사용 한다.
- - 메모리에 Cache되었을 때 시퀀스값의 액세스 효율이 증가 한다.
- - 시퀀스는 테이블과는 독립적으로 저장되고 생성된다.
시퀀스 생성
1
2
3
4
5
6
7
8
| -- 시퀀스 생성 Syntax CREATE SEQUENCE sequence_name [START WITH n] [INCREMENT BY n] [MAXVALUE n | NOMAXVALUE] [MINVALUE n | NOMINVALUE] [CYCLE | NOCYCLE] [CACHE | NOCACHE] |
- - START WITH : 시퀀스의 시작 값을 지정한다. n을 1로 지정하면 1부터 순차적으로 시퀀스번호가 증가 한다.
- - INCREMENT BY : 시퀀스의 증가 값을 지정한다. n을 2로 하면 2씩 증가한다. START WITH를 1로, INCREMENT BY를 2로 설정하면 1, 3, 5, 7,.. 이렇게 시퀀스 번호가 증가한다.
- - MAXVALUE : 시퀀스 최대값
- - MINVALUE : 시퀀스 최소값
- - CYCLE|NOCYCLE : 최대값 도달시 순환 여부
- - CACHE | NOCACHE : CACHE 여부, 원하는 숫자만큼 미리 만들어 Shared Pool의 Library Cache에 상주시킨다.
시퀀스 수정
START WITH 값을 제외하고 ALTER SEQUENCE 명령어로 수정 할 수 있다.
1
2
3
4
5
6
7
| -- 시퀀스 수정 Syntax ALTER SEQUENCE sequence_name [INCREMENT BY n] [MAXVALUE n | NOMAXVALUE] [MINVALUE n | NOMINVALUE] [CYCLE | NOCYCLE] [CACHE | NOCACHE] |
시퀀스의 사용예
시퀀스 생성
empno를 자동 증가하는 시퀀스를 만들어 보자
1
2
3
4
5
6
7
8
9
10
11
| -- 8000부터 시작하는 시퀀스를 생성하자 CREATE SEQUENCE seq_empno START WITH 8000 INCREMENT BY 1 CACHE 20; -- 시퀀스가 정상적으로 생성되었는지 조회해 보자 SELECT seq_empno.NEXTVAL FROM DUAL; SELECT seq_empno.NEXTVAL FROM DUAL; SELECT seq_empno.CURRVAL FROM DUAL; |
시퀀스를 이용해서 데이터를 등록해 보자
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| -- INSERT 시 시퀀스 사용 INSERT INTO emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) VALUES (seq_empno.NEXTVAL, 'TIGER' , 'MANAGER' , 7839, SYSDATE, 3000, null , 20); -- SELECT 절에서 시퀀스 사용 CREATE TABLE emp2 AS SELECT seq_empno.NEXTVAL as empno, ename, job, mgr, hiredate, sal, comm, deptno FROM emp; -- 시퀀스가 정상적으로 반영되었는지 조회해 보자 SELECT * FROM emp; |
시퀀스 수정
시퀀스 수정 예이다.
1
2
3
4
5
6
7
8
9
10
11
| -- seq_empno 시퀀스의 증과값과 Cache 사이즈를 변경하는 예이다. ALTER SEQUENCE seq_empno INCREMENT BY 10 CACHE 40; -- 시퀀스가 정상적으로 변경되었는지 조회해 보자 SELECT seq_empno.NEXTVAL FROM DUAL; SELECT seq_empno.NEXTVAL FROM DUAL; SELECT seq_empno.NEXTVAL FROM DUAL; SELECT seq_empno.CURRVAL FROM DUAL; |
시퀀스 삭제
DROP SEQUENCE 명령으로 시퀀스를 삭제 할 수 있다.