Oracle에서 자동 증가하는 방법, SEQUENCE와 IDENTITY 컬럼
데이터베이스에서 기본 키로 사용되는 값이 자동으로 증가하는 기능은 매우 흔하게 사용됩니다. Oracle에서는 이 기능을 구현하기 위해 주로 SEQUENCE
를 사용하지만, Oracle 12c부터는 IDENTITY
컬럼도 지원됩니다. 이번 글에서는 두 가지 방법에 대해 설명해보겠습니다!
1. SEQUENCE를 사용하는 방법
Oracle에서 자동 증가하는 값을 생성하기 위해 가장 전통적으로 사용되는 방법은 SEQUENCE
입니다. SEQUENCE
는 단순히 고유한 숫자를 생성해주는 객체로, 특정 규칙에 따라 숫자가 증가합니다.
1-1. SEQUENCE 생성하기
아래는 SEQUENCE를 생성하는 기본 예제입니다.
CREATE SEQUENCE seq_id
INCREMENT BY 1 -- 숫자가 1씩 증가합니다.
START WITH 1; -- 1부터 시작합니다.
이렇게 SEQUENCE를 생성한 후에는 NEXTVAL
키워드를 사용하여 다음 값을 가져올 수 있습니다.
1-2. SEQUENCE 사용하기
예를 들어, 테이블에 데이터를 삽입할 때 SEQUENCE를 사용하는 방법은 다음과 같습니다.
INSERT INTO my_table (id, name)
VALUES (seq_id.NEXTVAL, '홍길동');
이렇게 하면 seq_id
SEQUENCE가 1씩 증가하며 id
값이 자동으로 생성됩니다.
1-3. 장점과 유연성
SEQUENCE는 매우 유연합니다. 예를 들어, 시작 값, 증가 폭, 최소값 및 최대값 등을 쉽게 설정할 수 있습니다. 또한, 여러 테이블에서 동일한 SEQUENCE를 공유할 수 있어, 다양한 상황에 적응할 수 있습니다.
그러나, 이 방법은 SEQUENCE와 테이블 간에 직접적인 연관이 없으므로, 삽입 시 명시적으로 NEXTVAL
을 호출해야 합니다. 이 점은 번거롭게 느껴질 수 있습니다.
2. IDENTITY 컬럼 사용하기 (Oracle 12c 이상)
Oracle 12c부터는 다른 RDBMS(MySQL의 AUTO_INCREMENT
등)에서 흔히 사용하는 IDENTITY
컬럼을 지원합니다. 이 기능을 사용하면 특정 컬럼이 자동으로 증가하는 값으로 채워지도록 설정할 수 있습니다.
2-1. IDENTITY 컬럼 생성하기
아래는 IDENTITY 컬럼을 사용하는 예제입니다.
CREATE TABLE my_table (
id NUMBER GENERATED ALWAYS AS IDENTITY,
name VARCHAR2(100)
);
여기서 id
컬럼은 자동으로 1씩 증가하며, 사용자가 직접 값을 지정하지 않아도 자동으로 채워집니다.
2-2. IDENTITY 컬럼 옵션들
IDENTITY
컬럼은 다양한 옵션을 제공하여 더 세밀하게 조정할 수 있습니다:
- START WITH: 시작 값을 지정합니다.
- INCREMENT BY: 증가하는 단위를 지정합니다.
- MINVALUE, MAXVALUE: 최소값과 최대값을 설정합니다.
- CYCLE: 최대값에 도달하면 다시 시작할지 여부를 설정합니다.
- CACHE: 미리 생성된 값을 메모리에 캐시할지 여부를 설정합니다.
예를 들어, 아래와 같은 형태로 사용할 수 있습니다.
CREATE TABLE my_table (
id NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY (START WITH 100 INCREMENT BY 10),
name VARCHAR2(100)
);
이 예제에서는 id
가 100부터 시작해 10씩 증가합니다.
2-3. 장점과 제한 사항
IDENTITY
컬럼은 SEQUENCE
와 다르게 테이블과 직접 연결되어 있기 때문에, 데이터 삽입 시 별도의 코드 없이 자동으로 증가하는 값을 사용할 수 있습니다. 이로 인해 코드가 간단해지고 유지 관리가 쉬워집니다.
다만, SEQUENCE
처럼 여러 테이블에서 동일한 ID 시퀀스를 공유하는 경우에는 IDENTITY
컬럼이 적합하지 않을 수 있습니다.
3. 결론
Oracle에서 자동 증가 기능을 구현하는 두 가지 방법, SEQUENCE
와 IDENTITY
컬럼은 각각의 장단점이 있습니다. SEQUENCE
는 더 유연하고 강력한 기능을 제공하지만, 삽입 시 명시적으로 호출해야 합니다.
반면 IDENTITY
컬럼은 더 간편하게 자동 증가 기능을 설정할 수 있지만, 제한된 유연성을 가지고 있습니다.
어떤 방법을 선택할지는 각각의 프로젝트 요구 사항에 따라 다릅니다. 간단하게 자동 증가 기능을 구현하고 싶다면 IDENTITY
컬럼을, 더 많은 제어와 유연성이 필요하다면 SEQUENCE
를 선택하면 좋을 것 같습니다!
Oracle에서의 자동 증가 기능이 여러분의 데이터베이스 설계에 도움이 되길 바랍니다!
'DB > Oracle' 카테고리의 다른 글
Oracle SQL에서 텍스트 데이터의 줄바꿈 처리 방법 (0) | 2024.03.28 |
---|