hanker

[Oracle] 오라클 기본키 자동 증가 기능 구현 (Auto Increment) 본문

DATABASE/ORACLE

[Oracle] 오라클 기본키 자동 증가 기능 구현 (Auto Increment)

hanker 2025. 6. 4. 00:33
반응형

오라클에서 기본키 값 자동 증가하는 방법에 대해서 알아보자.

 


1. Oracle 12c 이후 버전

 

Oracle 12c 이후 버전에 대해서는 사실 Auto Increment 기능이 있다.

IDENTITY 를 사용하여 간단하게 자동 증가 시킬 수 있다.

CREATE TABLE employees (
    emp_id NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
    emp_name VARCHAR2(100),
    hire_date DATE
);

 

좀 더 세부적으로 설정해보자.

CREATE TABLE employees (
    emp_id NUMBER GENERATED BY DEFAULT AS IDENTITY (
        START WITH 1
        INCREMENT BY 1
        MAXVALUE 999999999
        NOCACHE
        NOCYCLE
    ) PRIMARY KEY,
    emp_name VARCHAR2(100),
    hire_date DATE
);
  • GENERATED BY DEFAULT : 키 값 지정 가능 /  GENERATED ALWAYS : 값을 직접 지정 불가
  • START WITH : 시작 값
  • INCREMENT BY : 증가 값
  • MAXVALUE : 최대값
  • NOCACHE : 캐시 사용 안함 (안전하지만 느림)
  • NOCYCLE : 순환 설정 (최대 값 도달시 최솟값으로 돌아가지 않음)

2. Oracle 11g 이하 버전

 

2-1. MAX 함수 사용 (권장 X)

데이터 삽입 시 MAX 함수를 사용하여 키 증가

INSERT INTO employees (emp_id, emp_name, hire_date)
VALUES (
    (SELECT NVL(MAX(emp_id), 0) + 1 FROM employees),
    '김철수',
    SYSDATE
);

해당 MAX함수를 사용하면 문제점들이 여러가지가 있어 권장하지 않는다.

  • 동시성 문제 : 두 사용자가 동시에 실행하면 같은 ID가 생성될 수 있음.
  • 성능 문제 : MAX함수를 사용하면 매번 전체 테이블을 스캔해야 함
  • 만약 사용해야한다면 LOCK을 걸어 동시성 문제를 해결해야 함

 

 

 

2-2. 시퀀스 사용

시퀀스를 사용하면 보다 편하게 기본키 자동 증가 기능을 구현할 수 있다.

CREATE SEQUENCE emp_seq
    START WITH 1
    INCREMENT BY 1
    NOCACHE
    NOCYCLE;

시퀀스 생성 후 NEXT_VAL을 사용하여 키를 증가 시킨다.

INSERT INTO employees (emp_id, emp_name, hire_date) 
VALUES (emp_seq.NEXTVAL, '박민수', SYSDATE);
반응형