InnoDB 엔진을 사용하는 경우 테이블의 auto_increment 값을 더 낮은 값으로 설정할 수 없습니다. 엔진을 InnoDB에서 MyISAM으로 변경해야 합니다.
참고: 엔진 MyISAM을 사용하면 더 낮은 값을 설정할 수 있습니다. 여기에서도 같은 것을 사용하고 있습니다.
공식 문서에 따르면:
You cannot reset the counter to a value less than or equal to any that have already been used. For MyISAM, if the value is less than or equal to the maximum value currently in the AUTO_INCREMENT column, the value is reset to the current maximum plus one. For InnoDB, if the value is less than the current maximum value in the column, no error occurs and the current sequence value is not changed.
위와 같이 MyISAM에서 일부 ID가 삭제되었다고 가정해 보겠습니다. 그 후 auto_increment를 다시 추가하면 ID가 더 낮은 값부터 시작됩니다. 즉, 남은 최종 ID(일부 ID를 삭제한 후)부터 시작합니다.
먼저 MyISAM 엔진을 사용하여 테이블을 생성해 보겠습니다.
mysql> create table DemoTable (Id int NOT NULL AUTO_INCREMENT PRIMARY KEY)ENGINE='MyISAM'; Query OK, 0 rows affected (0.23 sec)
다음은 insert 명령어를 사용하여 테이블에 레코드를 삽입하는 쿼리입니다.
mysql> insert into DemoTable values(); Query OK, 1 row affected (0.04 sec) mysql> insert into DemoTable values(); Query OK, 1 row affected (0.03 sec) mysql> insert into DemoTable values(); Query OK, 1 row affected (0.03 sec) mysql> insert into DemoTable values(); Query OK, 1 row affected (0.02 sec) mysql> insert into DemoTable values(); Query OK, 1 row affected (0.05 sec) mysql> insert into DemoTable values(); Query OK, 1 row affected (0.08 sec)
다음은 select 명령을 사용하여 테이블의 레코드를 표시하는 쿼리입니다.
mysql> select *from DemoTable;
그러면 다음과 같은 출력이 생성됩니다.
+----+ | Id | +----+ | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | +----+ 6 rows in set (0.00 sec)
이제 ID 4,5 및 6을 삭제합니다.
mysql> delete from DemoTable where Id=4 or Id=5 or Id=6; Query OK, 3 rows affected (0.06 sec)
모든 레코드를 다시 한 번 표시해 보겠습니다. 다음은 쿼리입니다.
mysql> select *from DemoTable;
일부 ID를 삭제한 후 다음과 같은 출력이 생성됩니다.
+----+ | Id | +----+ | 1 | | 2 | | 3 | +----+ 3 rows in set (0.00 sec)
이제 새로운 auto_increment ID를 설정해 보겠습니다.
다음은 MyISAM 엔진에서 auto_increment 값을 낮게 설정하는 쿼리이다. 그러나 현재 auto_increment 값은 이제 7에서 시작해야 하지만 MyISAM 엔진을 사용하고 있으므로 값은 현재 최대값으로 재설정됩니다. 즉, 3 더하기 1, 즉 3+ 1 =4가 새 ID가 됩니다.
다음은 쿼리입니다.
mysql> alter table DemoTable auto_increment=4; Query OK, 3 rows affected (0.38 sec) Records: 3 Duplicates: 0 Warnings: 0
이제 일부 레코드를 다시 한 번 삽입한 다음 테이블의 모든 레코드를 표시하여 auto_increment 값이 4부터 시작하는지 확인합니다.
mysql> insert into DemoTable values(); Query OK, 1 row affected (0.03 sec) mysql> insert into DemoTable values(); Query OK, 1 row affected (0.06 sec) mysql> insert into DemoTable values(); Query OK, 1 row affected (0.02 sec)
다음은 테이블의 모든 레코드를 표시하는 쿼리입니다.
mysql> select *from DemoTable;
그러면 다음과 같은 출력이 생성됩니다. 새 ID는 4:
부터 시작합니다.+----+ | Id | +----+ | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | +----+ 6 rows in set (0.00 sec)