[Oracle] 오라클 자동 증가 컬럼 만드는 방법 (IDENTITY)
- 데이터베이스/오라클
- 2025. 10. 7.
Oracle 12c부터는 별도의 시퀀스를 만들지 않아도 테이블 생성 시 자동 증가 컬럼을 정의할 수 있는 IDENTITY 컬럼 속성 기능이 추가되었다. 또한 Oracle 12c부터 테이블 생성 시 시퀀스를 컬럼의 기본값으로 직접 지정하는 추가되어서, 자동 증가 컬럼 기능을 사용하는데 훨씬 간편해졌다.
| 목차 |
IDENTITY 속성을 이용하여 자동 증가 컬럼 만들기
CREATE TABLE emp
(
empno NUMBER GENERATED ALWAYS AS IDENTITY,
ename VARCHAR2(10),
job VARCHAR2(9),
mgr NUMBER(4),
hiredate DATE,
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno NUMBER(2)
);
![]() |
위의 CREATE TABLE 구문에서 직원번호(empno) 컬럼 뒤에 NUMBER GENERATED ALWAYS AS IDENTITY 속성을 지정하여 직원 테이블에 데이터가 입력되면 empno 컬럼이 순차적으로 증가하는 것을 확인할 수 있다.
IDENTITY는 Oracle 12c부터 추가된 자동 증가 컬럼을 정의하기 위한 문법이며, 시퀀스를 내부적으로 자동 생성하여 값을 증가시킨다. (단, IDENTITY 속성은 SEQUENCE를 생성할 수 있는 권한이 있는 사용자만 사용할 수 있음)
CREATE TABLE emp
(
empno NUMBER GENERATED ALWAYS AS IDENTITY
(START WITH 1000 INCREMENT BY 10 CACHE 20),
ename VARCHAR2(10),
job VARCHAR2(9),
mgr NUMBER(4),
hiredate DATE,
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno NUMBER(2)
);
![]() |
START WITH [시작값] INCREMENT BY [증가 단위값] CACHE [캐시 개수]
위의 옵션을 사용하여 empno는 최초 1000부터 시작하면, 직원 데이터가 입력될 때마다 10씩 증가하여 직원번호를 생성한다. CACHE 옵션은 미리 메모리에 저장해 둘 숫자 개수 (성능 향상 목적)를 의미하여, CACHE를 사용할 경우 순차적으로 데이터가 입력되지 않을 수 있으니 순차적으로 데이터 입력을 원할 경우 CACHE [캐시 개수] → NOCACHE로 변경해서 사용하면 된다.
시퀀스를 컬럼 기본값으로 지정하여 자동 증가 컬럼 만들기
-- 시퀀스 생성
CREATE SEQUENCE emp_seq START WITH 1000 INCREMENT BY 20;
-- 테이블 생성
CREATE TABLE emp
(
empno NUMBER DEFAULT emp_seq.NEXTVAL PRIMARY KEY,
ename VARCHAR2(10),
job VARCHAR2(9),
mgr NUMBER(4),
hiredate DATE,
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno NUMBER(2)
);
![]() |
Oracle 12c부터 테이블 생성 시 DEFAULT 값에 SEQUENCE.NEXTVAL을 지정하여 자동 증가 기능을 구현하는 방법을 할 수 있다.
시퀀스는 여러 테이블과 컬럼에서 공유·재사용할 수 있고, 이름·증가 단위·캐시 등 동작 방식을 자유롭게 설정하거나 ALTER로 변경할 수 있어 유연성과 관리 편의성이 뛰어나다는 장점이 있다.
오라클 11g 이하에서 자동 증가 컬럼 사용법
INSERT INTO emp( empno
, ename
, job
, mgr
, hiredate
)
VALUES( (SELECT NVL(MAX(empno), 0) + 1 FROM emp)
, 'KING'
, 'PRESIDENT'
, NULL
, '1981-11-17'
)
MAX + 1 방식은 간단하고 빠르게 작성할 수 있지만, 여러 세션이 동시에 INSERT 할 때 동일한 번호가 생성될 수 있어 동시성 문제가 발생할 수 있다.
INSERT INTO emp( empno
, ename
, job
, mgr
, hiredate
)
VALUES( emp_seq.NEXTVAL
, 'KING'
, 'PRESIDENT'
, NULL
, '1981-11-17'
)
시퀀스 방식은 동시 처리 환경에서도 안정적이고 중복 없이 번호를 생성할 수 있지만, 시퀀스 객체를 생성학 관리해야 하는 번거로움이 있다.
[Oracle] 오라클 INSERT 1씩 증가시키는 방법 (MAX+1, 시퀀스)
오라클에서는 칼럼의 값을 자동으로 증가시키는 기능이 없기 때문에 INSERT 작업 시 직접 일련번호를 매번 후 데이터를 입력해야 한다. 가장 많이 사용하는 방법은 일련번호 칼럼의 마지막 값을
gent.tistory.com
[Oracle] 오라클 시퀀스(Sequence) 생성 및 사용법 (자동증가, 일련번호)
오라클에서는 자동 증가 컬럼을 사용할 수가 없다. 다른 DB에서는 컬럼 자체에 옵션이 있으나, 오라클에서는 컬럼의 값을 증가시키기 위해서는 MAX(컬럼) + 1 또는 시퀀스를 사용하여 일련번호를
gent.tistory.com


