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

MySQL 테이블 데이터 삭제 후 AUTO_INCREMENT를 1부터 다시 시작하는 방법

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; 구문을 활용하는 방법도 있습니다.