DB/Oracle

Oracle 시퀀스(Sequence)

진이최고다 2023. 5. 23. 23:55

Oracle 시퀀스(Sequence)

Oracle 시퀀스(Sequence)는 일련번호를 자동으로 생성하고, 관리하는 DB객체이다. 주로 테이블의 기본 키(Primary Key)값으로 사용되며, 중복된 ㄱ밧 없이 고유한 값을 보장한다.

 

테이블에 데이터를 저장할 때, 종종 각 행을 고유하게 식별할 수 있는 기본 키(Primary Key)가 필요하다.

이 기본 키는 중복될 수 없으며, 일반적으로 숫자 값으로 설정된다. 사용자가 직접 이 값을 관리하려면 중복이나 누락 없이 정확하게 관리해야 하는 번거러움이 있다.

 

이런 문제를 해결하기위해 Sequence라는 객체를 제공한다. 

 

시퀀스(Sequence) 장점

1. 자동증가 : 시퀀스는 자동으로 증가하거나 감소하는 일련의 숫자를 생성한다. 이는 중복되지 않는 기본 키 값을 만드는 데 유용하다.

 

2. 동시성 관리 : 여러 사용자가 동시에 데이터를 추가할 때, 동일한 기본 키 값을 가진 행을 추가하는 문제를 방지한다.

 

3. 성능 향상 : 시퀀스 값은 메모리에 캐시될 수 있어, 디스크 I / O 를 줄이고 성능을 향상시킬 수 있다.

 

4. 유연성 : 시작 값, 최대 / 최소 값, 증가 / 감소 값, 캐시 크기 등을 사용자가 지정할 수 있다.


데이터 예제

-- 시퀀스 생성
CREATE SEQUENCE user_id_seq
  START WITH 1
  INCREMENT BY 1;

-- users 테이블 생성
CREATE TABLE users (
  id INT PRIMARY KEY,
  username VARCHAR(50),
  email VARCHAR(100)
);

-- 트리거 생성
CREATE OR REPLACE TRIGGER user_id_trigger
BEFORE INSERT ON users
FOR EACH ROW
BEGIN
  SELECT user_id_seq.NEXTVAL
  INTO   :new.id
  FROM   dual;
END;
/

-- 시퀀스를 이용하여 테이블에 데이터 삽입
INSERT INTO users (username, email) 
VALUES ('홍길동', 'hong@example.com');

INSERT INTO users (username, email) 
VALUES ('이순신', 'lee@example.com');

INSERT INTO users (username, email) 
VALUES ('강감찬', 'kang@example.com');

위 예제에서는 'user_id_seq' 라는 시퀀스를 생성하였고, 사용자를 추가할 때마다

'user_id_seq.NEXTVAL' 을 사용하여, 'id'를 자동으로 생성한다.

 

이후 사용자 정보를 조회하려면 아래와 같이 쿼리를 통해 조회할 수 있다.

SELECT * FROM users;

시퀀스를 사용하여 id 값을 자동으로 생성하면, 새로운 레코드를 삽입할 때마다, 자동으로 증가하는 id 값을 얻을 수 있다. 따라서, 레코드를 삽입할 때 마다 id 값을 따로 지정해주지 않아도 되며, 중복되지 않는 유니크한 id 값을 보장받을 수 있다. 이는 데이터베이스 관리를 용이하게하며, 효율적이 데이터 관리를 가능하게 한다.