MySQL

MySQL AUTO_INCREMENT 사용하기

bang2001 2013. 8. 20. 15:28

검색속도의 향상과 검색의 편의성을 위해 기본키를 사용하게 됩니다. 이 기본키의 특성은 (http://blog.daum.net/bang2001/73) 에 간단히 알려드린 대로 중복이 불가하며, 일반적으로 정수값을 사용하고,  NULL값을 가질 수 없는 특성을 가지고 있습니다.


그래서 기본키가 설정된 DB Table에 데이터를 Insert를 하고자 할 경우 기본키로 설정된 컬럼에 들어갈 값을 구한 후 Insert 를 위한 SQL 질의문을 생성하고, 이 질의문을 실행하여 데이터를 삽입하게 됩니다.


그런데, 여기서 이 기본키로 설정된 컬럼에 대해서 삽입될 값을 구하기 위해 


1. 시퀀스를 이용한다.

2. select max(idx) + 1 as max_idx from dept; 와 같은 SQL 질의문을 사용한다.

3. 각 DBMS에 존재하는 함수나 옵션을 활용하는 방법


위 3가지 방법을 사용하게 됩니다. 여기서는 MS-SQL Server의 Identity 옵션과 거의 비슷한 기능을 가진 auto_increment 옵션에 대해서 간략히 소개합니다.


auto_increment 옵션은 기본키로 설정된 컬럼의 값이 자동으로 증가하도록 하는 옵션입니다. 이 옵션을 사용하면 위 3가지 방법에서 시퀀스나 2번과 같은 질의문을 사용하지 않아도 자동으로 알아서 기본키로 설정된 컬럼에 값이 삽입되게 됩니다. 이를 위해서는 DB Table 생성시 기본키로 설정된 컬럼에 아래와 같이 auto_increment 옵션을 명시해야 합니다.


create table MEMO(

idx int auto_increment primary key,

content text

);


위와 같이 명시하게 되면 idx 컬럼의 값은 자동으로 삽입되게 됩니다. 예를 들어 


insert into MEMO(content) values('메모입니다.'); 


위 SQL 질의문을 실행하게 되면 idx 컬럼의 자동으로 삽입됩니다. 즉 MS-SQL Server의 Identity 옵션과 너무나도 비슷한 기능이라고 할 수 있습니다. 하지만 차이는 있습니다. 


MS-SQL Server의 Identity 의 경우 Identity 옵션이 설정된  컬럼에 값을 직접적으로 명시 할 수 없습니다. 예를 들어 아래와 같은 질의문은 사용이 불가능합니다.


insert into MEMO(idx, content) values(2, '두 번째 메모입니다.'); 


하지만 MySQL에서는 auto_increment 옵션을 설정하였더라도 위의 질의문은 사용이 가능합니다. 여러 가지 차이가 있을 수 있겠지만 제가 보는 가장 큰 차이점은 바로 이것이 아닐까 생각합니다.


개인적인 생각으로 이러한 함수나 옵션은 많은 편리함을 가져다 주지만 특정 DBMS에만 존재하는 함수나 옵션을 사용하는 행위는 나중에 다른 DBMS로 변경했을 때 많은 어려움을 야기하는 것 같습니다. 따라서 이러한 옵션이나 함수를 무조건 사용하는 것 보다는 진행하는 프로젝의 상황을 한번 쯤 생각해 보시고 사용하시면 좋을 것 같습니다.