검색속도의 향상과 검색의 편의성을 위해 기본키를 사용하게 됩니다. 이 기본키의 특성은 (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로 변경했을 때 많은 어려움을 야기하는 것 같습니다. 따라서 이러한 옵션이나 함수를 무조건 사용하는 것 보다는 진행하는 프로젝의 상황을 한번 쯤 생각해 보시고 사용하시면 좋을 것 같습니다.
'MySQL' 카테고리의 다른 글
mysql에 입력했던 명령어(history)를 보기 (0) | 2015.08.04 |
---|---|
mysql 서비스 시작시 시스템 오류 1067 해결 방법 (0) | 2015.07.22 |
Configuration of mysql server is taking longer than expected (1) | 2015.07.22 |
MySQL 한글 깨짐 오류 해결 방법 #5 (0) | 2015.07.22 |
MySQL 한글 깨짐 오류 해결 방법 #4 (0) | 2015.07.22 |