티스토리 뷰
SEQUENCE (시퀀스)
SEQUENCE는 사적적 의미로는 "각각의 독립된 연속성" 이라는 뜻이 있다. 이 뜻 그대로 테이블로 가져오면 아마 독립된 무언가를 만들어 준다는 그런 의미로 해석되어 질 수 있다. 그렇다. 이 SEQUENCE 녀석은 저번 글에서 나왔던 기본키를 대체한다고 생각하면 이해가 쉬울 것이다. 데이터의 값이 겹치지 않게 고유한 값을 번호로 부여하는 것 이게 SEQUENCE이다. 그래서 먼저 다른 Query 문을 작성하기 전에 시퀀스의 정의와 생성하는 법을 정리하고 가보자.
- 테이블에서 유일한 값(UNIQUE)을 생성해준다.
- 시퀀스는 순차적으로 값이 증가하는 숫자컬럼을 자동으로 생성한다.
- 보통 기본키에 많이 사용한다.
1. SEQUENCE(시퀀스) 생성
CREATE SEQUENCE SEQ_mogakco_name INCREMENT BY 1 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
'SQL' 카테고리의 다른 글
- Total
- Today
- Yesterday
- 윈도우11 사용자 계정이름 변경
- 오라클 CONNECT
- 파이썬
- 테이블 명 변경
- 다중 컬럼 서브 쿼리
- 반목분
- 오라클 시스템 권한
- 오라클 데이터 삭제
- 합성 연산자
- for 구구단
- 오라클
- for while 차이
- 파이썬 리턴 값 주석
- 오라클 데이터 수정
- 오라클 데이터 추가
- 오라클 인스톨 rollback
- oracle
- 중첩 서브 쿼리
- SQL
- Database Express Edition(XE)
- Python
- 오라클 XE 설치에러
- h2 db
- 오라클 RESOURCE
- 오라클 ROLE
- 오라클 SYSTEM 계정
- SQL Developer
- CURRVAL
- Where
- NEXTVAL
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |