DELETE는 자동 증가 값을 초기화하지 않지만, 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)
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)
DELETE 후 재삽입 (AUTO_INCREMENT 유지)
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)
TRUNCATE 후 재삽입 (AUTO_INCREMENT 리셋)
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)
차이점:
DELETE: 행 단위 삭제, 트리거 실행, 롤백 가능, AUTO_INCREMENT 유지TRUNCATE: 테이블 재생성 수준, 트리거 미실행, 롤백 불가, AUTO_INCREMENT 리셋, 훨씬 빠름
테스트 데이터 초기화엔 TRUNCATE, 실제 서비스 데이터 삭제엔 DELETE를 쓰세요.