Sử dụng TRUNCATE TABLE để xóa nhanh toàn bộ dữ liệu, reset AUTO_INCREMENT.
Cú pháp
TRUNCATE TABLE table_name;
Ví dụ minh họa
mysql> CREATE TABLE DeleteAllFromTable ( PersonId INT, PersonName VARCHAR(200) ); Query OK, 0 rows affected (0.67 sec) mysql> INSERT INTO DeleteAllFromTable VALUES (100,'Johnson'), (101,'John'), (102,'Carol'), (103,'Sam'); Query OK, 4 rows affected
Dữ liệu trước khi xóa:
+----------+------------+ | PersonId | PersonName | +----------+------------+ | 100 | Johnson | | 101 | John | | 102 | Carol | | 103 | Sam | +----------+------------+
Thực hiện TRUNCATE:
mysql> TRUNCATE TABLE DeleteAllFromTable; Query OK, 0 rows affected (0.80 sec) mysql> SELECT * FROM DeleteAllFromTable; Empty set (0.00 sec)
TRUNCATE vs DELETE
| Đặc điểm | TRUNCATE TABLE | DELETE FROM table |
|---|---|---|
| Tốc độ | Rất nhanh (deallocate pages) | Chậm (xóa từng dòng, log từng dòng) |
| AUTO_INCREMENT | Reset về 1 | Giữ nguyên |
| Trigger | Không kích hoạt | Kích hoạt ON DELETE |
| Rollback | Không thể (DDL) | Có thể (DML, trong transaction) |
| WHERE clause | Không hỗ trợ | Hỗ trợ |
| Foreign Key | Lỗi nếu bị tham chiếu | Kiểm tra FK |
Lưu ý
TRUNCATElà DDL (Data Definition Language), tự commit, không rollback được.- Nếu bảng bị FOREIGN KEY tham chiếu,
TRUNCATEsẽ báo lỗi. Cần disable FK check hoặc dùng DELETE. - Để xóa có điều kiện: phải dùng
DELETE WHERE ....