반응형

시퀀스 개념과 용도
| 시퀀스 개념 시퀀스는 컴퓨터가 자동으로 만들어내는 번호표 기계와 같다. 우리가 일일이 숫자를 입력하지 않아도, 컴퓨터가 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가 같은 것끼리 짝을 맞춤 |
'Infra & Security Eng > Database Engineering' 카테고리의 다른 글
| [PHP] Oracle DB 연동 및 테이블별 데이터 출력 실습 (st_vi, pr_vi 등) (0) | 2026.03.20 |
|---|---|
| [PHP] Oracle 19c 데이터베이스 연동: oci_connect 상세 주소와 별칭으로 접속하기 (0) | 2026.03.20 |
| 인라인 뷰 Top-N 분석과 RANK 개념과 실습 (0) | 2026.02.12 |
| SQL 뷰 인라인뷰 개념,특징, 실제 문제 (0) | 2026.02.12 |
| SQL 인덱스의 정의, 종류, 특징, 생성, 삭제, 외래키 관련 정리 (0) | 2026.02.11 |







