티스토리 뷰

auto_increment 값은 순차적으로 관리되기가 힘들다?

어떤분이 DB사랑넷에 올리신 글을 보고
테스트를 한번 해본 결과를 정리하려고 합니다.

1. 우선 테이블을 아래와 같이 만들고,

CREATE TABLE T_source (
       id     INT    UNSIGNED    NOT NULL
);

CREATE TABLE T_target (
      id     INT    UNSIGNED    NOT NULL   AUTO_INCREMENT,
     num   INT   UNSIGNED    NOT NULL,     
      PRIMARY KEY (id)
);



2.  T_source 테이블에 1부터 100까지 넣습니다.(insert)

3.. T_target에 insert 하는 구문을 실행합니다.

INSERT INTO T_target (num)
SELECT id FROM T_source;

4. 결과는 만족스럽지만.

SHOW TABLE STATUS LIKE 'T_target';

이걸 보면 실망스럽습니다. 왜냐하면 다음 insert 부터는 T_target의 id값이 128부터 시작하기 때문이죠.

왜 101 이 아니라 128일까요.
mysql은 insert ... select 구문에서는 안에 auto_increment 컬럼의 값을 미리 2^n 개 만큼 가져와서 부여하기 때문이죠.
이후에 또 insert .. select 구문을 써도 마찬가지로 2^n 개만큼을 미리 할당해서 부여합니다.
테스트로 set autocommit = 0; 를 실행후에 해보았는데도
동일한 결과를 얻었습니다.

제가 내린결론은,
auto_increment 필드가 insert.. select 구문으로 데이터를 채워넣는 서비스에서
실 데이터 증가량과 정확하게 일치될 수 있는 방법은
2^n개로 insert 시키는 방법밖에 없다.. 라는 결론이지요.

ㅎㅎㅎ 조금 우울하네요.


댓글
댓글쓰기 폼