Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 AUTO_INCREMENT를 현재 시퀀스 번호보다 작은 값으로 변경하면 어떻게 될까?

MySQL AUTO_INCREMENT의 기본 동작 원리

MySQL 컬럼에 AUTO_INCREMENT를 적용하면 시퀀스 번호는 항상 기본값 1 또는 사용자가 직접 지정한 값부터 시작하여 오름차순으로 증가합니다. 이러한 특성 때문에 MySQL은 현재 시퀀스 번호보다 작은 값으로 AUTO_INCREMENT를 변경하는 것을 사실상 허용하지 않습니다. 다음 예제를 통해 그 동작 방식을 자세히 살펴보겠습니다.

예제: 현재 시퀀스보다 작은 값으로 변경하기

이 예제에서는 'emp1'이라는 테이블이 있고, 테이블 생성 시 AUTO_INCREMENT 값을 100으로 지정했다고 가정합니다. 따라서 데이터를 삽입하면 시퀀스는 100부터 시작하며, 아래 쿼리 결과에서 이를 확인할 수 있습니다.

mysql> Select * from emp1;
+-----+---------+
| id  | NAME    |
+-----+---------+
| 100 | Sohan   |
| 101 | Harshit |
+-----+---------+
2 rows in set (0.00 sec)

이제 ALTER TABLE 쿼리를 사용해 AUTO_INCREMENT 값을 90으로 변경해 보겠습니다. 쿼리 문법 자체에는 문제가 없기 때문에 MySQL은 에러나 경고 없이 정상적으로 처리된 것처럼 응답합니다. 하지만 실제로 새 데이터를 삽입하는 순간, MySQL은 지정된 AUTO_INCREMENT 값(90)과 현재 시퀀스 번호(101)를 비교합니다. 지정된 값이 현재 시퀀스 번호보다 작기 때문에 MySQL은 이를 무시하고 새로운 값들을 102부터 차례대로 부여합니다. 이 동작은 다음 쿼리 결과에서 확인할 수 있습니다.

mysql> ALTER TABLE EMP1 AUTO_INCREMENT = 90;
Query OK, 2 rows affected (0.31 sec)
Records: 2 Duplicates: 0 Warnings: 0

mysql> Insert into emp1(name) values('Aryan');
Query OK, 1 row affected (0.08 sec)

mysql> Select * from emp1;
+-----+---------+
| id  | NAME    |
+-----+---------+
| 100 | Sohan   |
| 101 | Harshit |
| 102 | Aryan   |
+-----+---------+
3 rows in set (0.00 sec)

반대의 경우: 현재 시퀀스보다 큰 값으로 변경하기

반면에 AUTO_INCREMENT 값을 현재 시퀀스 번호보다 값으로 변경하면 상황이 달라집니다. 이때 MySQL은 지정된 값부터 새로운 시퀀스를 시작합니다.

이를 더 명확하게 이해하기 위해 'emp1' 테이블의 AUTO_INCREMENT 값을 현재 시퀀스 번호보다 큰 108로 변경해 보겠습니다. 그러면 MySQL은 이후에 삽입되는 새 레코드에 지정된 AUTO_INCREMENT 값인 108부터 순서대로 번호를 부여합니다.

mysql> ALTER TABLE EMP1 AUTO_INCREMENT = 108;
Query OK, 3 rows affected (0.30 sec)
Records: 3 Duplicates: 0 Warnings: 0

mysql> Insert into emp1(name) values('Daksh');
Query OK, 1 row affected (0.04 sec)

mysql> Insert into emp1(name) values('Yashraj');
Query OK, 1 row affected (0.06 sec)

mysql> Select * from emp1;
+-----+---------+
| id  | NAME    |
+-----+---------+
| 100 | Sohan   |
| 101 | Harshit |
| 102 | Aryan   |
| 108 | Daksh   |
| 109 | Yashraj |
+-----+---------+
5 rows in set (0.00 sec)

핵심 정리

AUTO_INCREMENT 값 변경 시 MySQL의 동작을 요약하면 다음과 같습니다.

· 현재 시퀀스보다 작은 값으로 변경: 에러나 경고 없이 조용히 무시되며, 새 레코드는 기존 최대 시퀀스 번호(여기서는 102)부터 계속 증가합니다.
· 현재 시퀀스보다 큰 값으로 변경: 지정한 값(예: 108)부터 새로운 시퀀스가 시작됩니다.

따라서 AUTO_INCREMENT 값을 되돌리거나 줄이려는 의도로 ALTER TABLE을 실행하더라도 이미 사용된 시퀀스 번호는 재사용되지 않으므로, 이 점을 반드시 염두에 두고 설계해야 합니다.