Cả TRUNCATE và DELETE đều xóa toàn bộ hàng trong bảng nhưng giữ cấu trúc bảng. Khác biệt quan trọng là việc tái khởi tạo (re-initialize) khóa chính AUTO_INCREMENT.
DELETE: Không tái khởi tạo bảng. Khi chèn hàng mới,AUTO_INCREMENTtiếp tục từ giá trị cuối cùng.TRUNCATE: Tái khởi tạo bảng như mới tạo.AUTO_INCREMENTbắt đầu lại từ 1.
Ví dụ minh họa
mysql> CREATE TABLE Testing(Id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, Name VARCHAR(20));
Query OK, 0 rows affected (0.15 sec)
mysql> INSERT INTO testing(Name) VALUES('Gaurav'),('Rahul'),('Aarav'),('Yashraj'),('Manak');
Query OK, 5 rows affected (0.09 sec)
mysql> SELECT * FROM testing;
+----+---------+
| Id | Name |
+----+---------+
| 1 | Gaurav |
| 2 | Rahul |
| 3 | Aarav |
| 4 | Yashraj |
| 5 | Manak |
+----+---------+
5 rows in set (0.00 sec)
mysql> DELETE FROM testing WHERE id >= 4;
Query OK, 2 rows affected (0.04 sec)
mysql> SELECT * FROM testing;
+----+--------+
| Id | Name |
+----+--------+
| 1 | Gaurav |
| 2 | Rahul |
| 3 | Aarav |
+----+--------+
3 rows in set (0.00 sec)
mysql> INSERT INTO testing(Name) VALUES('Harshit'),('Lovkesh');
Query OK, 2 rows affected (0.06 sec)
mysql> SELECT * FROM testing;
+----+---------+
| Id | Name |
+----+---------+
| 1 | Gaurav |
| 2 | Rahul |
| 3 | Aarav |
| 6 | Harshit |
| 7 | Lovkesh |
+----+---------+
5 rows in set (0.00 sec)
-- AUTO_INCREMENT tiếp tục từ 6, 7
mysql> TRUNCATE TABLE testing;
Query OK, 0 rows affected (0.10 sec)
mysql> INSERT INTO testing(Name) VALUES('Harshit'),('Lovkesh'),('Ram'),('Gaurav');
Query OK, 4 rows affected (0.11 sec)
mysql> SELECT * FROM testing;
+----+---------+
| Id | Name |
+----+---------+
| 1 | Harshit |
| 2 | Lovkesh |
| 3 | Ram |
| 4 | Gaurav |
+----+---------+
4 rows in set (0.00 sec)
-- AUTO_INCREMENT reset về 1, 2, 3, 4