티스토리 뷰
📌 SQL SEQUENCE 란?
SQL에서 시퀀스(Sequence)는 주로 고유한 숫자 값을 자동으로 생성할 때 사용되는 객체입니다.
예를 들어, 각 레코드에 대해 고유한 ID를 자동으로 생성하는 데 사용됩니다.
시퀀스는 테이블에 삽입되는 데이터의 일관성을 유지하고, 번호 매기기 등의 작업을 쉽게 할 수 있도록
도와줍니다.
📌 SQL 시퀀스 기본 문법
SQL 시퀀스를 사용하면 자동으로 고유한 값을 생성할 수 있습니다.
예를 들어, 테이블에 새로운 데이터를 삽입할 때마다 자동으로 증가하는 값이 필요할 때 시퀀스를 사용합니다.
1. 시퀀스 생성 (CREATE SEQUENCE)
CREATE SEQUENCE sequence_name
START WITH starting_value
INCREMENT BY increment_value
MINVALUE min_value
MAXVALUE max_value
CACHE cache_size;
-
- sequence_name : 시퀀스의 이름
- START WITH : 시퀀스 시작값
- INCREMENT BY : 시퀀스가 증가하는 값
- MINVALUE : 최소값 (선택 사항)
- MAXVALUE : 최대값 (선택 사항)
- CACHE : 시퀀스 값을 캐시할 수 있는 개수
2. 시퀀스 값 얻기 (NEXTVAL, CURRVAL)
-
- NEXTVAL : 시퀀스에서 다음 값을 가져옵니다.
- CURRVAL : 현재 시퀀스의 값을 가져옵니다. (단, NEXTVAL을 한번 호출한 후 사용 가능)
SELECT sequence_name.NEXTVAL FROM dual;
SELECT sequence_name.CURRVAL FROM dual;
* 여기서 dual은 Oracle 데이터베이스에서 가상 테이블로 사용됩니다.
3. 시퀀스 값 삽입 예시
-
- 테이블에 데이터를 삽입할 때 시퀀스를 사용하여 자동으로 고유한 값을 생성할 수 있습니다.
INSERT INTO employees (employee_id, first_name, last_name, department)
VALUES (employee_id_seq.NEXTVAL, 'John', 'Doe', 'Sales');
📌 사용 예제
CREATE SEQUENCE employee_id_seq
START WITH 1
INCREMENT BY 1
MINVALUE 1
MAXVALUE 10000
CACHE 10;
-
- 이 시퀀스는 employee_id_seq라는 이름으로 생성되며, START WITH 1로 시작하고, INCREMENT BY 1로 1씩 증가합니다.
- 최소값은 1, 최대값은 10,000이며, 캐시 크기는 10으로 설정됩니다.
2. 시퀀스 값 삽입 예시
INSERT INTO employees (employee_id, first_name, last_name, department)
VALUES (employee_id_seq.NEXTVAL, 'Alice', 'Johnson', 'HR');
-
- employee_id_seq.NEXTVAL은 employee_id_seq에서 다음 값을 가져와 employee_id 컬럼에 삽입됩니다.
3. 시퀀스 값 조회 예시
SELECT employee_id_seq.CURRVAL FROM dual;
-
- CURRVAL은 현재 시퀀스 값, 즉 마지막으로 생성된 값을 반환합니다. NEXTVAL을 먼저 호출한 후 사용해야 합니다.
📌 GOOD 사용법
1. 고유한 ID 자동 생성
CREATE SEQUENCE employee_id_seq
START WITH 1
INCREMENT BY 1;
그리고 새로운 직원을 추가할 때
INSERT INTO employees (employee_id, first_name, last_name, department)
VALUES (employee_id_seq.NEXTVAL, 'Bob', 'Smith', 'Engineering');
-
- 이 방식은 ID 충돌을 방지하고, 데이터 삽입 시 자동으로 고유한 값을 생성할 수 있게 합니다.
2. 시퀀스 캐시 활용
-
- 시퀀스는 자주 사용되는 경우 성능이 중요합니다.
- CACHE 옵션을 사용하여 값을 미리 생성해두면 성능이 향상됩니다.
CREATE SEQUENCE employee_id_seq
START WITH 1
INCREMENT BY 1
CACHE 20;
-
- CACHE를 설정하면 시퀀스가 여러 값을 미리 메모리에 저장하여 성능이 좋아집니다. 다만, 서버가 재시작되면 캐시된 값이 사라질 수 있습니다.
📌 BAD 사용법
1. 시퀀스 값 중복 사용
-
- 시퀀스를 사용하면서 실수로 값을 중복해서 사용하는 경우가 있을 수 있습니다.
- 예를 들어, CURRVAL을 호출하기 전에 NEXTVAL을 호출하지 않으면 오류가 발생할 수 있습니다.
-- 잘못된 사용: NEXTVAL 호출 없이 CURRVAL 호출
SELECT employee_id_seq.CURRVAL FROM dual; -- 오류 발생
-
- 해결 방법: NEXTVAL을 먼저 호출한 후 CURRVAL을 사용할 수 있습니다.
SELECT employee_id_seq.NEXTVAL FROM dual;
SELECT employee_id_seq.CURRVAL FROM dual;
2. 시퀀스 값의 범위 관리 부족
-
- 시퀀스의 MAXVALUE와 MINVALUE를 설정하지 않으면, 시퀀스가 계속 증가하다가 범위를 벗어나게 되어 오류를 발생시킬 수 있습니다. 예를 들어, 시퀀스의 값이 너무 커져서 MAXVALUE를 초과하면 오류가 발생할 수 있습니다.
시퀀스를 활용하면 코드의 가독성이 높아지고, 데이터베이스의 성능도 향상시킬 수 있습니다.
하지만 시퀀스의 범위 설정이나 값 중복 사용에 주의해야 하며, 잘못된 사용은 오류를 초래할 수 있습니다.
시퀀스를 제대로 활용하면 데이터를 보다 효율적으로 관리하고, 자동화된 처리를 통해 오류를 줄일 수 있습니다.
반응형