0. 시퀀스란?
- 자동으로 순차적으로 증가하는 순번을 반환하는 데이터베이스 객체.
- 보통 PK값에서 중복발생 방지를 위하여 사용
1. 개괄
1) 생성
CREATE SEQUENCE 시퀀스명 -- 시퀀스명: table명_컬럼명_seq
START WITH 1 -- 1부터 시작
INCREMENT BY 1 -- 1씩 증가
NOCACHE -- 캐시 사용X
NOCYCLE; -- NOCYCLE 설정시 최대값 생성 시 시퀀스 생성을 중지한다.
- start with, increment by, nocache, nocycle이 무엇인지 궁금하다면 아래의 '2. 옵션' 참고
2) 삭제
DROP SEQUENCE 시퀀스명;
3) 조회 - 전체 시퀀스 조회
- 만들어져 있는 모든 시퀀스를 조회한다.
SELECT * FROM USER_SEQUENCES;
4) 조회 - 특정 시퀀스 조회
SELECT 시퀀스명 FROM DUAL;
2. 옵션
1) start with
- 시작번호
2) increment by
- 증감단위. 증감숫자가 양수면 증가, 음수면 감소. 디폴트는 1.
3) cache | nocache
- 메모리에 시퀀스값을 미리 할당할 것인지 (cache) 말 것인지 (nocache)
4) cycle | nocycle
- cycle : 시퀀스 값이 최대값에 도달하면 최소값부터 다시 시작한다.
- nocycle : 시퀀스 값이 최대 값에 도달하면 시퀀스 생성을 중지한다.
5) max_value
- 시퀀스의 최대값을 지정
6) min_value
- 시퀀스의 최소값을 지정
3. CURRVAL, NEXTVAL
- CURRVAL : 현재 시퀀스를 확인한다. (current value)
- NEXTVAL : 해당 시퀀스의 값을 증가시킨다. (next value)
- 주의사항) SELECT만 해도 NEXTVAL을 썼을 경우 시퀀스 값을 증가시킨다!
- 주의사항) 시퀀스와 테이블은 독립적이다!
-- board3 테이블 생성
CREATE TABLE board3(
no NUMBER PRIMARY KEY,
name VARCHAR2(20) NOT NULL
);
-- board3_no_seq 시퀀스 생성
CREATE SEQUENCE board3_no_seq
START WITH 1
INCREMENT BY 1
NOCYCLE
NOCACHE;
INSERT INTO board3 VALUES (board3_no_seq.nextval, '쑤'); --시퀀스=1.
SELECT board3_no_seq.currval FROM DUAL; -- 시퀀스=1
SELECT board3_no_seq.nextval FROM DUAL; -- 시퀀스=2
INSERT INTO board3 VALUES (board3_no_seq.nextval, '최밍밍'); --시퀀스=3.
-- SELECT만 해도 nextval을 쓰면 시퀀스 값이 증가한다.
SELECT * FROM board3;
-- 결과) board3의 데이터는 아래와 같음
-- no name
-- 1 쑤
-- 3 최밍밍
DELETE FROM board3 WHERE no=3;
INSERT INTO board3 VALUES(board3_no_seq.nextval, '일리윤'); --시퀀스=4
-- 테이블 행을 삭제한다고 해서 시퀀스 값이 1씩 당겨지지 않는다!
-- 시퀀스와 테이블은 독립적. 별도로 움직인다.
SELECT * FROM board3;
-- 결과) board3의 데이터는 아래와 같음
-- no name
-- 1 쑤
-- 4 일리윤
반응형
'Programming > Database(Oracle, SQL)' 카테고리의 다른 글
[Oracle/SQL] 집합연산자 UNION, UNION ALL, INTERSECT, MINUS (0) | 2020.02.18 |
---|---|
[Oracle/SQL] 형 변환함수 - TO_CHAR, TO_NUMBER, TO_DATE (0) | 2020.02.04 |
[Oracle/SQL] 날짜함수 - SYSDATE, NEXT_DAY, LAST_DAY 등 (0) | 2020.02.02 |
[Oracle/SQL] 숫자함수 - ROUND, TRUNC, CEIL, MOD (0) | 2020.02.02 |
[Oracle/SQL] 문자함수 - SUBSTR, INSTR, TRIM 등 (0) | 2020.01.30 |
[Oracle/SQL] SQL 연산자, 데이터형 (0) | 2020.01.29 |
[Oracle/SQL] SQL의 종류 - DQL, DML, DDL, DCL, TCL (0) | 2020.01.29 |
[Oracle 기초] 가격정책, CRUD, 스키마 (0) | 2020.01.27 |