본문 바로가기
Infra & Security Eng/Database Engineering

시퀀스 개념, 용도, 생성, 수정, 삭제, 확인 명령어, 게시판 테이블 생성 실습

by 엔지니어 E 2026. 2. 12.
반응형

시퀀스 개념과 용도

시퀀스 개념
시퀀스는 컴퓨터가 자동으로 만들어내는 번호표 기계와 같다. 우리가 일일이 숫자를 입력하지 않아도, 컴퓨터가 1,2,3처럼 순서대로 숫자를 만들어 준다
* 중복 없음: 한 번 나온 숫자는 다시 나오지 않는다. 세상에 단 하나뿐인 번호를 보장함
* Insert절에 시퀀스를 많이 사용 

시퀀스 용도
데이터베이스에 정보를 저장할 때, 각 정보를 구별할 수 있는 고유한 이름표가 필요하기 때문이다
* 문서를 정리하기 위해 시퀀스를 사용
* 시퀀스를 만들때 grooping(그룹핑)을 잘해야 함

 

시퀀스 생성과 수정 

CREATE SEQUENCE 시퀀스_ 이름 -- 새로운 번호 생성기를 만들기 위해 CREATE 사용 
ALTER SEQUENCE 시퀀스_이름 -- 이미 만든 생성기의 설정을 바꾸기 위해 ALTER 사용 

[START WITH 시작_값] -- 몇 번 부터 번호를 시작할지 정하려고 사용
* 값을 안주면 자동으로 값이 생성됨

[INCREMENT BY 증가_값] -- 번호를 몇 씩 키울지 정하려고 

[MAXVALUE 상한_값] -- 번호가 어디까지 올라갈 수 있는지 끝을 정하려고 
* MAXVALE: 생성될 상한 값을 정의함, 기본 설정은 NOMAXVALE임

[NOMAXVALUE] -- 끝을 정하지 않고 계속 큰 숫자를 쓰려고 

[MINVALUE 하한_값] -- 번호가 최소 얼마보다는 커야 하는지 정하려고
* MINVALUE: 하한값을 정의함, 기본 설정은 NOMINVALUE임

[NOMINVALUE] -- 최소 숫자를 정하지 않으려고 

* MAXVALUE와 MINVALE는 cycle을 지정 했을 때만 사용함

[CYCLE] -- 상한 값까지 생성한 이후 다시 하한 값부터 재 생성할 것인지 여부 

[NOCYCLE] -- 끝 번호가 지나면 더 이상 번호를 만들지 않으려고 

[CACHE cache_개수] -- 번호를 미리 여러 개 만들어두어 속도를 빠르게 하려고 
* CACHE: 메모리에 값을 미리 만들어 놓는 숫자

 

시퀀스 생성 하기

CREATE SEQUENCE emp_eno_seq    -- 새로운 번호표 기계를 만들고 이름을 'emp_eno_seq'라고 지음
START WITH 1                   -- 번호를 1번부터 시작하게 함
INCREMENT BY 1                 -- 번호를 한 번 부를 때마다 1씩 커지게 함
NOMAXVALUE                     -- 번호가 올라갈 수 있는 최대 한계를 정하지 않음
NOMINVALUE                     -- 번호가 내려갈 수 있는 최소 한계를 정하지 않음
NOCYCLE                        -- 번호가 끝까지 가도 다시 처음으로 돌아가지 않음
CACHE 20;                      -- 속도를 높이기 위해 번호 20개를 미리 뽑아서 저장해 둠

출력결과



MIN_VALUE=1
해석: 이 번호표 기계가 낼 수 있는 가장 작은 숫자
예시: 너는 1등 부터 번호를 줄 거야 라는 뜻

MAX_VALUE = 1.0000E+28
해석: 번호표 기계가 낼 수 있는 가장 큰 숫자. NOMANVALUE라고 설정했기 때문에 컴퓨터가 낼 수 있는 최대치까지 허용된 상태
예시: 사람이 아무리 많이 와도 번호가 부족할 일이 없다. 거의 무한대라서

INCREMENT_BY=1
해석: 번호 사이의 간격
예시: 지금 번호가 1이라면, 다음 사람은 2, 그 다음 사람은 3을 받게 됨

CACHE_SIZE= 20
해석: 컴퓨터가 미리 뽑아 놓은 번호 개수
예시: 공장에 주문이 들어올 때마다 번호를 찍어내면 느리니까 미리 1번부터 20번까지 번호표를 인쇄해서 책상 위에 올려둔 상태

LAST_NUMBE= 1 (또는 21)
해석: 다음에 새로 번호를 찍어낼 때 시작할 숫자
예시: 현재 캐시(CACHE)에 20번까지 준비되어 있다면, 20장을 다 쓰고 나서 새로 인쇄할 번호는21번이 됨

 

시퀀스 삭제와 확인 하기

시퀀스 삭제
DROP SEQUENCE 시퀀스;
* 시퀀스를 사용할 때 drop 명령어 쓰면 시스템 멈추기 때문에 이때는 사용 하면 안됨




시퀀스 확인하기
SELECT sequence_name, max_value, min_value, increment_by,
cache_size, last_number, cycle_flag
FROM user_sequences;

시퀀스.NEXTVAL: 시퀀스 객체로부터 다음 가용 번호를 생성하여 할당 받는 명령어이다. 호출될 때마다 시퀀스의 현재 값이 증가 설정값만큼 올라가며 새로운 숫자를 반환함

시퀀스.CURRVAL: 동일한 세션 내에서 해당 시퀀스가 마지막으로 할당받았던 현재 값을 다시 읽어오는 명령어이다. 이 명령어는 숫자를 증가시키지 않고 기존 값을 유지하며 가져온다

 

시퀀스 실습하기

다음 ERD에 따라 생성된 테이블에 행을 입력한다 





1. 테이블 생성(관계 반영) (부모 테이블: 기준이 되는 번호를 가짐)
먼저 board를 만들고, 그것을 참조하는 content를 만든다 

CREATE TABLE board (
    bno NUMBER PRIMARY KEY, -- 게시글 번호 (고유한 기본키)
    name VARCHAR2(20), -- 작성자 이름
    sub VARCHAR2(50) -- 게시글 제목
);
* board  테이블은 정보를 제공하는 부모이고, content 테이블은 그 정보를 빌려 쓰는(참조하는) 자식이다 

2. content 테이블 생성 (자식 테이블: board의 번호를 빌려와서 본문을 저장)
CREATE TABLE content (
    bno NUMBER,                -- 게시글 번호
    text VARCHAR2(100)         -- 게시글 본문 내용
);

3. 제약조건 생성

ALTER TABLE content
ADD CONSTRAINT fk_board FOREIGN KEY (bno) REFERENCES board(bno); -- content 테이블의 bno가 board 테이블의 bno를 바라보도록 외래키(FK) 설정

4. 시퀀스 및 표(테이블)에 내용(데이터) 입력 
CREATE SEQUENCE bo_bno_seq; -- 숫자를 자동으로 만들어 주는 객체(시퀀스)를 데이터베이스 안에 생성함


INSERT INTO board (bno, name, sub)
VALUES (bo_bno_seq.nextval, '이름', '제목은'); -- 데이터 입력 (NEXTVAL로 새 번호 생성)
이 문장은 board라는 표에 한 줄의 정보를 넣는 동작



INSERT INTO content (bno, text)
VALUES (bo_bno_seq.currval, '본문'); -- 데이터 입력 (CURRVAL로 nextval이 만들었던 방금 번호 재사용)

* board와 content에 nextaval, curraval 사용하는 이유

board와 content 는 서로 다른 표이지만, 같은 숫자를 가지고 있어야 서로 짝궁인 것을 알 수 있다. 첫 번째 표(board)에서 번호를 **생성(nextval)**하고, 두 번째 표(content)에서는 방금 만든 그 번호를 **복사(currval)**해서 넣는 방식

5. 명령어로 두 테이블 확인 

1) Board 테이블 확인 하기
SELECT * FROM board;


2) content 테이블 확인 하기
SELECT * FROM content;


3) JOIN 명령어로 두 테이블 합쳐서 확인하기 (실무에서 많이 사용)
SELECT b.bno, b.name, b.sub, c.text  -- b(board)에서 번호, 이름, 제목을 가져오고 c(content)에서 본문을 가져옴
FROM board b                         -- 데이터를 가져올 메인 테이블은 board이며, 별명을 'b'로 정함
JOIN content c ON b.bno = c.bno;     -- content 테이블(별명 'c')을 합치되, 두 테이블의 bno가 같은 것끼리 짝을 맞춤