Giới thiệu
TRUNCATE TABLE xóa toàn bộ dữ liệu và reset AUTO_INCREMENT về 1. Để bắt đầu từ số khác, dùng ALTER TABLE ... AUTO_INCREMENT = N sau khi truncate.
Ví dụ thực hành
1. Tạo bảng DemoTable825
mysql> CREATE TABLE DemoTable825 (
Value INT NOT NULL AUTO_INCREMENT PRIMARY KEY
);
2. Chèn 3 hàng (ID = 1,2,3)
mysql> INSERT INTO DemoTable825 VALUES (),(),();
3. TRUNCATE bảng
mysql> TRUNCATE TABLE DemoTable825;
4. Đặt AUTO_INCREMENT = 2000
mysql> ALTER TABLE DemoTable825 AUTO_INCREMENT = 2000;
5. Chèn tiếp 3 hàng
mysql> INSERT INTO DemoTable825 VALUES (),(),();
6. Kết quả: ID bắt đầu từ 2000
+-------+
| Value |
+-------+
| 2000 |
| 2001 |
| 2002 |
+-------+
So sánh TRUNCATE vs DELETE
| Đặc điểm | TRUNCATE TABLE | DELETE FROM table |
|---|---|---|
| Tốc độ | Rất nhanh (deallocate pages) | Chậm (xóa hàng từng hàng, log) |
| AUTO_INCREMENT | Reset về 1 (hoặc giá trị ALTER) | Giữ nguyên giá trị tiếp theo |
| Trigger | Không kích hoạt | Kích hoạt DELETE trigger |
| Rollback | Không thể (DDL, implicit commit) | Có thể (trong transaction) |
| Khóa ngoại (FK) | Thường thất bại nếu có FK tham chiếu | OK nếu ON DELETE CASCADE/SET NULL |
Lưu ý
TRUNCATElà DDL → tự động commit, không rollback được.- Nếu bảng có FK được tham chiếu,
TRUNCATEsẽ báo lỗi (trừ khiFOREIGN_KEY_CHECKS=0— không khuyến khích). - Giá trị
AUTO_INCREMENTphải > MAX(id) hiện tại (sau truncate là 0, nên 2000 OK).