본문 바로가기
DB/Oracle

Oracle SQL에서 컬럼 자동 증가하는 방법

by 노 코딩 노 라이프 2024. 8. 19.

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에서 자동 증가 기능을 구현하는 두 가지 방법, SEQUENCEIDENTITY 컬럼은 각각의 장단점이 있습니다.
SEQUENCE는 더 유연하고 강력한 기능을 제공하지만, 삽입 시 명시적으로 호출해야 합니다.
반면 IDENTITY 컬럼은 더 간편하게 자동 증가 기능을 설정할 수 있지만, 제한된 유연성을 가지고 있습니다.

 

어떤 방법을 선택할지는 각각의 프로젝트 요구 사항에 따라 다릅니다. 간단하게 자동 증가 기능을 구현하고 싶다면 IDENTITY 컬럼을, 더 많은 제어와 유연성이 필요하다면 SEQUENCE를 선택하면 좋을 것 같습니다!

Oracle에서의 자동 증가 기능이 여러분의 데이터베이스 설계에 도움이 되길 바랍니다!

'DB > Oracle' 카테고리의 다른 글

Oracle SQL에서 텍스트 데이터의 줄바꿈 처리 방법  (0) 2024.03.28
[Oracle] SQL 문자 함수  (0) 2024.03.27
[Oracle] SQL 단일 행 함수  (0) 2024.03.26