본문 바로가기

IT관련

테이블 자동 시리얼 번호 컬럼 Auto Increment Identity Column (오라클 12c 신기능)

MySQL 에 auto_increment 라는 컬럼 키워드가 있습니다. 데이터가 들어올때마다 자동으로 시리얼 번호를 붙여주는 기능입니다.

Oracle 에도 이런 똑같은 기능이 12.1 버전부터 생겼습니다.

 

create table TEMP_AUTO (
   col_id    number  generated as identity,
   col_text  varchar2(50)
);

위와 같이 generated as identity 키워드를 붙여주면 MySQL 의 auto_increment 와 똑같은 동작을 합니다.

 

아래와 같이 TEMP_AUTO 테이블에 데이터를 Insert 할때, col_id 컬럼을 넣지 않으면 자동으로 순차번호가 부여되어 Insert 됩니다.

insert into TEMP_AUTO (col_text) values ('aaaaaa1');
insert into TEMP_AUTO (col_text) values ('aaaaaa2');
insert into TEMP_AUTO (col_text) values ('aaaaaa3');
insert into TEMP_AUTO (col_text) values ('aaaaaa4');
insert into TEMP_AUTO (col_text) values ('aaaaaa5');

col_id 컬럼에 1번부터 순차적으로 번호가 부여된 것을 확인할 수 있습니다.

 

앞에서는 매우 단순하게 사용했는데, 다양한 설정도 가능합니다.

시작값을 1부터 시작했는데, 다른 값부터 시작할 수 있고, 증가분도 1씩 증가가 아니라 더 큰 값으로 지정할 수 있습니다.

 

(출처: docs.oracle.com)

 

위의 Syntax 를 보면 오라클 시퀀스(Sequence)와 매우 비슷한 것을 알 수 있습니다.

실제로, 이게 내부적으로 시퀀스를 생성해서 사용합니다. 

 

위 Syntax 를 활용해서 몇가지 샘플을 만들어 봤습니다.

create table TEMP_AUTO (
   col_id    number   generated always as identity,
   col_text  varchar2(50)
);
   -- 이건 위와 똑같습니다. generated 뒤에 always / by default 가 나올 수 있는데, always 가 기본입니다.
   -- always 는 반드시 사용해야 함을 의미합니다. 즉, 임의의 값으로 지정해서 넣을 수 없습니다.
   -- 아래처럼, col_id 에 임의로 값을 넣을 수가 없습니다.
   -- SQL> insert into TEMP_AUTO (col_id, col_text) values (33, 'aaaaaa5');
   --         ORA-32795: cannot insert into a generated always identity column


2)
create table TEMP_AUTO (
   col_id    number   generated by default as identity,
   col_text  varchar2(50)
);
   -- by default 로 지정하면, col_id 에 임의의 값을 지정해서 넣을 수 있습니다.

3)
create table TEMP_AUTO (
   col_id    number   generated by default as identity (start with 30 increment by 10),
   col_text  varchar2(50)
);
   -- 30부터 시작해서 10씩 증가시키면서 번호를 부여합니다.

 

 

이 Auto Increment 컬럼은 내부적으로 시퀀스를 이용하기 때문에 테이블 생성할때 시퀀스도 자동으로 함께 만들어집니다.

테이블을 삭제하면 시퀀스도 자동으로 삭제됩니다.