다른 테이블의 MAX 값을 사용하여 MySQL AutoIncrement를 재설정하려면 prepare 문을 사용할 수 있습니다.
다음은 구문입니다 -
set @anyVariableName1=(select MAX(yourColumnName) from yourTableName1); SET @anyVariableName2 = CONCAT('ALTER TABLE yourTableName2 AUTO_INCREMENT=', @anyVariableName1); PREPARE yourStatementName FROM @anyVariableName2; execute yourStatementName;
위의 구문은 다른 테이블의 최대값을 사용하여 MySQL auto_increment를 재설정합니다. 위의 구문을 이해하기 위해 두 개의 테이블을 생성해 보겠습니다. 첫 번째 테이블은 레코드를 포함하고 두 번째 테이블은 첫 번째 테이블의 최대값을 사용하고 auto_increment 속성에 사용합니다.
테이블을 생성하는 쿼리는 다음과 같습니다 -
mysql> create table FirstTableMaxValue -> ( -> MaxNumber int -> ); Query OK, 0 rows affected (0.64 sec)
insert 명령을 사용하여 테이블에서 레코드를 삽입합니다. 쿼리는 다음과 같습니다 -
mysql> insert into FirstTableMaxValue values(100); Query OK, 1 row affected (0.15 sec) mysql> insert into FirstTableMaxValue values(1000); Query OK, 1 row affected (0.19 sec) mysql> insert into FirstTableMaxValue values(2000); Query OK, 1 row affected (0.12 sec) mysql> insert into FirstTableMaxValue values(90); Query OK, 1 row affected (0.15 sec) mysql> insert into FirstTableMaxValue values(2500); Query OK, 1 row affected (0.17 sec) mysql> insert into FirstTableMaxValue values(2300); Query OK, 1 row affected (0.12 sec)
select 문을 사용하여 테이블의 모든 레코드를 표시합니다.
쿼리는 다음과 같습니다 -
mysql> select *from FirstTableMaxValue;
출력
+-----------+ | MaxNumber | +-----------+ | 100 | | 1000 | | 2000 | | 90 | | 2500 | | 2300 | +-----------+ 6 rows in set (0.05 sec)
이제 두 번째 테이블을 만들 수 있습니다. 두 번째 테이블을 생성하는 쿼리는 다음과 같습니다. -
mysql> create table AutoIncrementWithMaxValueFromTable -> ( -> ProductId int not null auto_increment, -> Primary key(ProductId) -> ); Query OK, 0 rows affected (1.01 sec)
여기에 첫 번째 테이블에서 최대 값을 가져오고 두 번째 테이블에 대해 최대 값을 auto_increment 속성으로 설정하는 명령문을 포함하겠습니다. 쿼리는 다음과 같습니다 -
mysql> set @v=(select MAX(MaxNumber) from FirstTableMaxValue); Query OK, 0 rows affected (0.00 sec) mysql> SET @Value2 = CONCAT('ALTER TABLE AutoIncrementWithMaxValueFromTable AUTO_INCREMENT=', @v); Query OK, 0 rows affected (0.00 sec) mysql> PREPARE myStatement FROM @value2; Query OK, 0 rows affected (0.29 sec) Statement prepared mysql> execute myStatement; Query OK, 0 rows affected (0.38 sec) Records: 0 Duplicates: 0 Warnings: 0
이제 첫 번째 테이블에서 두 번째 테이블까지 최대값인 2500을 추가했습니다. 이제 2500, 2501 등으로 시작하는 테이블에 레코드를 삽입할 수 있습니다.
두 번째 테이블에 레코드를 삽입하는 쿼리는 다음과 같습니다. -
mysql> insert into AutoIncrementWithMaxValueFromTable values(); Query OK, 1 row affected (0.24 sec) mysql> insert into AutoIncrementWithMaxValueFromTable values(); Query OK, 1 row affected (0.10 sec)
select 명령을 사용하여 테이블의 모든 레코드를 확인하십시오. 쿼리는 다음과 같습니다 -
mysql> select *from AutoIncrementWithMaxValueFromTable;
출력
+-----------+ | ProductId | +-----------+ | 2500 | | 2501 | +-----------+ 2 rows in set (0.00 sec)