반응형
1. SEQUENCE란 무엇인가?
오라클 데이터베이스에서 **SEQUENCE(시퀀스)**는 자동으로 고유한 숫자 값을 생성해주는 객체입니다.
주로 기본 키와 같이 유일한 값을 필요로 하는 경우 사용됩니다. SEQUENCE는 트랜잭션 간 충돌 없이 순차적으로 번호를 생성할 수 있어 대규모 데이터 처리에 적합합니다.
2. SEQUENCE의 특징
- 자동 증가: 값을 수동으로 관리하지 않아도 지정된 규칙에 따라 숫자가 자동으로 증가합니다.
- 유일성 보장: SEQUENCE가 생성하는 값은 중복되지 않습니다.
- 다양한 설정 가능: 시작 값, 증가 값, 최대값, 반복 여부 등을 설정할 수 있습니다.
- 독립성: 테이블과 독립적으로 동작하며, 여러 테이블에서 공유할 수도 있습니다.
3. SEQUENCE 생성 및 삭제
SEQUENCE 생성
SEQUENCE는 CREATE SEQUENCE 명령어를 사용하여 생성합니다.
기본 문법
CREATE SEQUENCE 시퀀스_이름
START WITH 시작값
INCREMENT BY 증가값
[MINVALUE 최소값 | NOMINVALUE]
[MAXVALUE 최대값 | NOMAXVALUE]
[CYCLE | NOCYCLE]
[CACHE 캐시값 | NOCACHE];
주요 옵션 설명
- START WITH: 생성되는 첫 번째 숫자 (기본값: 1).
- INCREMENT BY: 각 호출 시 증가 또는 감소할 값 (기본값: 1).
- MINVALUE: 생성 가능한 최소값 (기본값: 1).
- MAXVALUE: 생성 가능한 최대값.
- CYCLE: 최대값 도달 시 다시 최소값부터 시작.
- CACHE: 메모리에 미리 저장할 시퀀스 숫자 개수로 성능 향상.
SEQUENCE 삭제
시퀀스를 삭제하려면 DROP SEQUENCE 명령어를 사용합니다.
DROP SEQUENCE 시퀀스_이름;
4. SEQUENCE 사용법
SEQUENCE 값을 호출하려면 NEXTVAL과 CURRVAL을 사용합니다.
- NEXTVAL: 다음 순번 값을 반환합니다.
- CURRVAL: 가장 최근에 생성된 값을 반환합니다.
사용 예제
SELECT 시퀀스_이름.NEXTVAL FROM DUAL;
- 설명: 시퀀스_이름에서 다음 값을 가져옵니다.
SELECT 시퀀스_이름.CURRVAL FROM DUAL;
- 설명: 가장 최근에 생성된 값을 확인합니다.
5. SEQUENCE 활용 예제
예제 1: 기본 키 자동 생성
1) SEQUENCE 생성
CREATE SEQUENCE emp_seq
START WITH 1
INCREMENT BY 1
NOMAXVALUE
NOCACHE
NOCYCLE;
- 설명: emp_seq라는 이름의 SEQUENCE를 생성하며, 시작값은 1, 증가값은 1로 설정합니다.
2) INSERT문에서 사용
INSERT INTO employees (employee_id, name, department)
VALUES (emp_seq.NEXTVAL, '홍길동', 'IT');
- 설명: emp_seq에서 생성된 값을 employee_id에 삽입합니다.
3) 결과 확인
SELECT * FROM employees;
Employee_ID Name Department
1 | 홍길동 | IT |
예제 2: 주문 번호 생성
1) SEQUENCE 생성
CREATE SEQUENCE order_seq
START WITH 1000
INCREMENT BY 10
MAXVALUE 9999
NOCYCLE;
- 설명: 주문 번호를 위한 SEQUENCE를 생성하며, 시작값은 1000, 증가값은 10, 최대값은 9999로 설정합니다.
2) 값 확인
SELECT order_seq.NEXTVAL FROM DUAL;
- 결과: 1000
SELECT order_seq.NEXTVAL FROM DUAL;
- 결과: 1010
예제 3: CURRVAL 사용
SELECT emp_seq.CURRVAL FROM DUAL;
- 설명: emp_seq에서 마지막으로 생성된 값을 가져옵니다.
- 주의: NEXTVAL을 호출한 이후에만 CURRVAL을 사용할 수 있습니다.
6. SEQUENCE와 트리거 결합
SEQUENCE는 테이블의 기본 키를 자동 생성하는 트리거와 결합해 자주 사용됩니다.
트리거 생성 예제
CREATE OR REPLACE TRIGGER trg_emp_id
BEFORE INSERT ON employees
FOR EACH ROW
BEGIN
:NEW.employee_id := emp_seq.NEXTVAL;
END;
- 설명: employees 테이블에 새 행을 삽입할 때마다 emp_seq를 사용해 employee_id를 자동 생성합니다.
사용
INSERT INTO employees (name, department)
VALUES ('김철수', 'HR');
- 결과: employee_id는 자동으로 SEQUENCE에서 생성된 값으로 설정됩니다.
7. SEQUENCE 사용 시 유의사항
- 중복 방지
SEQUENCE는 트랜잭션 간 고유 값을 보장합니다. 그러나 삭제된 행의 번호를 재사용하지 않으므로, 필요 시 CYCLE 옵션을 고려해야 합니다. - 최대값 관리
SEQUENCE는 최대값에 도달하면 멈추거나(CYCLE 미설정 시) 다시 최소값으로 돌아갑니다(CYCLE 설정 시).
데이터 모델링 시 이를 고려해야 합니다. - 성능 최적화
다수의 트랜잭션에서 SEQUENCE를 호출하면 성능 문제가 발생할 수 있습니다. 이를 방지하려면 CACHE 옵션을 적절히 설정하세요.
8. 마치며
오라클의 SEQUENCE는 고유한 숫자를 생성하고 관리하는 데 필수적인 도구입니다.
SEQUENCE를 사용하면 기본 키 생성, 주문 번호 관리, 기타 고유 값 생성 작업이 간단하고 안전해집니다.
위의 예제들을 참고해 SEQUENCE를 데이터베이스 설계와 운영에 효과적으로 활용해보세요.
반응형
'Database' 카테고리의 다른 글
오라클 데이터베이스 연결: 사용자 및 세션 이해하기 (0) | 2024.12.03 |
---|---|
오라클 SYNONYM과 PUBLIC SYNONYM 사용법 (0) | 2024.12.03 |
오라클 SQL 제약 조건: NOT NULL, UNIQUE, CHECK (0) | 2024.12.03 |
오라클 SQL 제약 조건: NOT NULL, UNIQUE, CHECK (0) | 2024.12.03 |
오라클 SAVEPOINT로 복구 지점 설정하기 (0) | 2024.12.03 |