본문 바로가기

Engineering/DB

MySQL auto increment 를 0 으로 설정할때, insert 하기

728x90

MySQL 에서 테이블의 필드(보통 ID)를 auto increment 로 설정하면 행이 하나씩 추가할때 자동 증가하게 된다.

그런데, 다음 테이블에서 'id' 값을 0 번부터 시작하기 위해서, AUTO_INCREMENT 를 0 으로 설정한다. (보통은 1번부터 시작하겠지만 0 번에 해당하는 초기값으로 설정되어 있어야 하는 상황이다.)

CREATE TABLE 'id_tbl`

  `id` int(11) NOT NULL AUTO_INCREMENT

  `flag` int(11) NOT NULL DEFAULT '0',

  PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;


INSERT INTO `Users` VALUES (0, 10), (1, 20);


위의 insert 문에서 0 번과 1번 id 값으로 insert 를 하려고 하는데, 아마 중복 오류가 나올것이다. 이때, 다음과 같이 0 번 값만 insert 하고 id_tbl 테이블을 확인해보면 id 값이 1 로 되어 있는 것을 확인할 수 있다.

INSERT INTO `Users` VALUES (0, 10);


mysql>select * from id_tbl;

| id | flag

|1   |  10   


 이때의 해결 방법은 다음 쿼리문을 실행하면 원하는 결과를 얻을 수 있다.

mysql> set SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

mysql> INSERT INTO `Users` VALUES (0, 10);

mysql> INSERT INTO `Users` VALUES (1, 20);

mysql>select * from id_tbl;

| id | flag

| 0  |  10

| 1  |  20 


자동 증가하는 값도 AUTO_INCREMENT_OFFSET 설정으로 변경이 가능하다.

/etc/my.cnf 에서 서버 설정부분에다가 추가한다.

auto-increment-increment = 100

auto-increment-offset = 1

* auto-increment-increment : 자동증가컬럼(auto-increment 설정된 컬럼) 의 값이 단위 숫자만큼 증가. ex) 101, 201, 301, ...

* auto-increment-offset : 자동증가컬럼의 시작값.



도움받은 곳 :

http://stackoverflow.com/questions/10753505/mysql-id-auto-increment-doesnt-starts-from-0