MySQL에서 DELETE 문으로 테이블의 데이터를 모두 삭제해도 자동 증가(AUTO_INCREMENT) 값은 초기화되지 않고 이어집니다. 이때 TRUNCATE TABLE 명령어를 사용하면 테이블을 완전히 비우고 AUTO_INCREMENT 값을 1부터 다시 시작할 수 있습니다.
TRUNCATE TABLE과 DELETE의 차이
DELETE FROM 테이블명;은 행 단위로 데이터를 삭제하며, AUTO_INCREMENT 카운터는 그대로 유지됩니다. 반면 TRUNCATE TABLE 테이블명;은 테이블을 처음 생성된 상태처럼 초기화하기 때문에 AUTO_INCREMENT 값도 1로 리셋됩니다.
예제 테이블 생성
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable1796
(
StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentName varchar(20)
);
Query OK, 0 rows affected (0.00 sec)데이터 삽입 및 확인
insert 명령으로 몇 개의 레코드를 삽입합니다.
mysql> insert into DemoTable1796(StudentName) values('Chris Brown');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1796(StudentName) values('David Miller');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1796(StudentName) values('John Doe');
Query OK, 1 row affected (0.00 sec)select 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select * from DemoTable1796;
실행 결과는 다음과 같습니다.
+-----------+--------------+ | StudentId | StudentName | +-----------+--------------+ | 1 | Chris Brown | | 2 | David Miller | | 3 | John Doe | +-----------+--------------+ 3 rows in set (0.00 sec)
DELETE로 삭제한 경우 — AUTO_INCREMENT가 유지되는 현상
delete 문으로 테이블의 레코드를 삭제합니다.
mysql> delete from DemoTable1796; Query OK, 3 rows affected (0.00 sec)
이후 새 레코드를 삽입하면 어떻게 될까요?
mysql> insert into DemoTable1796(StudentName) values('John Doe');
Query OK, 1 row affected (0.00 sec)
mysql> select * from DemoTable1796;
+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 4 | John Doe |
+-----------+-------------+
1 row in set (0.00 sec)위 결과를 보면 StudentId가 1이 아닌 4부터 시작합니다. 즉, DELETE로 데이터를 삭제해도 AUTO_INCREMENT 값은 초기화되지 않습니다.
TRUNCATE TABLE로 AUTO_INCREMENT 초기화
이제 TRUNCATE TABLE 명령어를 사용해 보겠습니다.
mysql> truncate table DemoTable1796; Query OK, 0 rows affected (0.00 sec)
테이블이 초기화된 상태에서 다시 레코드를 삽입합니다.
mysql> insert into DemoTable1796(StudentName) values('John Doe');
Query OK, 1 row affected (0.00 sec)
mysql> select * from DemoTable1796;
+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 1 | John Doe |
+-----------+-------------+
1 row in set (0.00 sec)이번에는 StudentId가 1부터 다시 시작되는 것을 확인할 수 있습니다.
정리
DELETE: 데이터만 삭제되며 AUTO_INCREMENT 값은 유지됩니다.TRUNCATE TABLE: 테이블 전체를 초기화하므로 AUTO_INCREMENT 값도 1로 리셋됩니다.
단, TRUNCATE는 WHERE 절을 사용할 수 없고 테이블의 모든 데이터를 삭제하므로, 일부 데이터만 지우면서 증가값을 조정하고 싶다면 ALTER TABLE 테이블명 AUTO_INCREMENT = 1; 구문을 활용하는 방법도 있습니다.