BLOG main image
분류 전체보기 (313)
교육 (13)
NEIS (6)
Edufine (0)
Programmer (5)
Android Programming (1)
Internet W3 (18)
JAVA Programming (9)
JSP/Servlet (1)
Framework (7)
Spring For Beginner (4)
eGovFrame (10)
MEAN Stack (2)
NodeJS (5)
SublimeText (30)
SublimeText_Tips (18)
Eclipse (16)
JavaScript (8)
jQuery (12)
jQuery_tips (1)
Ajax (3)
DWR(Direct Web Remote) (4)
JSON(JS Object Notation) (4)
Oracle (2)
MySQL (28)
OS (16)
Download (3)
Life (10)
Favorit Site (1)
Books (2)
Healthy (1)
Stocks (1)
HTML5/CSS (1)
Python (4)
Security (7)
CISSP (0)
Ruby On Rails (5)
일기장 (0)
영어 교과서(중2) (3)
알고리즘 (0)
Go Lang (3)
VB 2010 (12)
C# (1)
정보보안기사(네트워크보안) (0)
업무 활용 엑셀 (11)
틈틈이 활용팁 (14)
하루 하루 살아가며 ……. (2)
기술 (1)
파이썬 & 데이터분석 (1)
Visitors up to today!
Today hit, Yesterday hit
daisy rss
tistory 티스토리 가입하기!
2015. 7. 22. 15:29

검색속도의 향상과 검색의 편의성을 위해 기본키를 사용하게 됩니다. 이 기본키의 특성은 (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로 변경했을 때 많은 어려움을 야기하는 것 같습니다. 따라서 이러한 옵션이나 함수를 무조건 사용하는 것 보다는 진행하는 프로젝의 상황을 한번 쯤 생각해 보시고 사용하시면 좋을 것 같습니다.

 

출처 : http://blog.daum.net/bang2001/91

반응형