시퀀스(sequence)
시퀀스란 자동으로 순차적으로 증가하는 순번을 반환하는 데이터베이스 객체
보통 PK값에 중복값을 방지하기위해 사용
가령, 메모장에 메모가 하나 추가될때마다 글번호(PK)가 생겨야 한다고 가정했을 때
만약 5번까지 메모 번호가 생성되어있다면 그 다음 글이 추가가 되었을 경우 글 번호가 6으로 하나의 ROW를 생성해주어야 할 것 이다.
이때 6이라는 숫자를 얻으려면 기존 글번호중 가장 큰 값에 +1을 하는 로직을 어딘가에 넣어야하는데
시퀀스를 사용하면 이러한 로직이 필요없이 데이터베이스에 ROW가 추가될때마다 자동으로 +1을 시켜주어 매우 편리하다,
형식)
create sequence 시퀀스이름
start with n (시작번호 설정 - 기본적으로 기본값은 1)
increment by n (증가 번호 설정 - 기본적으로 증가값은 1)
maxvalue n (시퀀스 최대 번호 설정)
minvalue n (시퀀스 최소 번호 설정)
cache / nocache (시퀀스의 값을 빠르게 설정하기 위해 캐쉬 메모리 사용여부)
/*
1) cache : 시퀀스를 빨리 제공하기 위해서 미리 캐쉬 메모리에 시퀀스를 넣어 두고
준비하고 있다가 시퀀스 작업이 필요할 때 사용.
디폴트로는 20개의 시퀀스를 캐쉬 메모리에 보관하게 됨.
하지만 만약 시스템이 비정상적으로 종료를 하게 되면
캐쉬 메모리에 존재하던 남은 시퀀스 번호는 사라지게 됨.
2) nocache : cache 기능을 사용하지 않겠다는 의미
*/
-- 시퀀스의 다음 시퀀스 번호를 확인하고 싶은 경우
SELECT MEMO_SEQ.NEXTVAL FROM DUAL;
-- 메모 테이블 생성
CREATE TABLE memo (
bunho number(5) primary key, -- 메모 글번호
title varchar2(100) not null, -- 메모 글제목
writer varchar2(50) not null, -- 메모 글 작성자
content varchar2(500) not null, -- 메모 글 내용
regdate date -- 메모 글 작성일
);
-- 메모 작성 시 사용할 시퀀스를 만들어 보자
create sequence memo_seq --시퀀스이름 memo_seq
start with 1 -- 시작 숫자
increment by 1 -- 증감 숫자
NOCACHE; -- CACHE 사용하지 않음.
-- memo 테이블에 데이터를 저장
insert into memo
values (memo_seq.nextval, '메모1','홍길동','홍길동님 글', sysdate);
insert into memo
values (memo_seq.nextval, '메모2','이순신','장군님 글',sysdate);
insert into memo
values (memo_seq.nextval, '메모3','유관순','유관순님 글',sysdate);
insert into memo
values (memo_seq.nextval, '메모4','김아무개','김아무개님 글',sysdate);
insert into memo
values (memo_seq.nextval, '메모5','이아무개','이아무개님 글',sysdate);
--넣었던 데이터를 SELECT문으로 확인
select * from memo;
위와같이 1, 2, 3, 4 ,5이라는 BUNHO값이 순차적으로 INSERT된것을 볼 수 있다
시퀀스명.NEXTVAL을 사용하면 해당 시퀀스에서 다음 순번 값을 자동으로 가져온다
'Back-End > Database' 카테고리의 다른 글
[SQL] dual 테이블/ 기본 함수_1(날짜 관련 / 문자 관련) (0) | 2021.10.05 |
---|---|
[SQL] JOIN (0) | 2021.10.05 |
[SQL] 그룹함수 (avg, count , max, min, sum) (0) | 2021.10.04 |
[SQL] order by / asc / desc / 오름차순,내림차순 정렬 (0) | 2021.10.04 |
[SQL] like 키워드 (0) | 2021.10.04 |
댓글