Computer >> 컴퓨터 >  >> 프로그램 작성 >> MySQL

다른 테이블의 MAX 값을 사용하여 MySQL AutoIncrement를 재설정하는 방법은 무엇입니까?

<시간/>

다른 테이블의 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)