DBMS/MySQL 5.1

MySQL5.0에서 auto_increment 사용할 때 주의할 점

본클라쓰 2009. 11. 3. 10:40

 

auto_increment 속성은 테이블 내 컬럼에 고유값을 생성할 때 사용한다. 이 고유값은 0부터 시작하며 시작값은 Default 값이 0으로 지정되어 있다. 또한, auto_increment로 생성되는 값은 중간 레코드가 삭제되었다고 삭제된 auto_increment 값이 새로운 레코드에 사용되지 않는다. 즉, 고유값은 auto_increment로 생성된 값의 마지막을 기준으로 계속하여 증가한다. 하지만 마지막 auto_increment 값을 삭제했을 경우에는 새로운 레코트의 auto_increment 값은 삭제된 마지막 값이 된다. auto_increment 속성을 사용할 때 주의할 점은 다음과 같다.

 

 

● auto_increment 속성을 주는 컬럼은 항상 기본키(primary key)로 지정되어야 한다.

 

auto_increment 속성을 부여하는 컬럼에는 primary key 속성도 함께 지정해 주어야 한다. 만약, primary key 속성을 지정하지 않은 상태에서 auto_increment 속성을 부여하면 문법적 오류를 발생시킨다. 이 때 not null 속성은 주지 않아도 문법적 오류를 발생시키지 않지만 primary key 속성은 오류를 발생시킨다.

 

※ primary key 속성을 부여하지 않았을 때 발생하는 오류 코드

 

ERROR 1075 : Incorrect table definition : there can be only one auto column and it must be defined as a key.

 

오류 발생 쿼리문

CREATE TABLE table (

    sequence int auto_increment 

);

 

오류가 발생하지 않는 쿼리문

CREATE TABLE table (

    sequence int auto_increment primary key

);

 

 

이와 같은 문법적 오류를 발생시키는 원인은 auto_increment 속성은 유니크한 키 값을 자동으로 생성해주는 명령어로서 테이블내에서 유니크한 키 값을 제외한 다른 고유키(primary key)를 선언할 수 없게 문법적으로 막아놓은 것이다.

 

하나의 테이블에는 고유키(primary key)를 하나만 가지는게 데이터의 무결성을 지키는 방법이기 때문에 auto_increment 선언을 할 때는 primary key 선언을 같이 하지 않으면 문법적 오류로 처리해 버린다.

 

 

만약 한 테이블에 고유키(primary key)를 두 개 이상 가지고 싶다면, primary key() 함수를 사용하여 선언하면 된다.

 

CREATE TABLE table ( a int, b int, primary key(a,b) );

 

위와 같은 방법으로 한 테이블안에 고유키를 여러 개 가질 수 있다.

 

또한, auto_increment 속성을 사용하면서 시작하는 값을 지정하고 싶다면 Default 값을 지정할 수도 있다. 이 때 테이블을 생성하면서 시작값을 지정할 수는 없고, 테이블을 정의한 후 테이블의 속성을 변경하는 방법으로 시작값을 지정할 수 있다. 지정하는 방법은 다음과 같다.

 

ALTER TABLE '테이블명' AUTO_INCREMENT='Default Value';

 

ALTER TABLE testTable AUTO_INCREMENT = 100;

 

위 예제처럼 값을 지정하면 시작값이 100부터 시작된다.