Reset AUTO_INCREMENT về 1 với TRUNCATE TABLE
Cách nhanh nhất để đặt lại giá trị AUTO_INCREMENT về 1 là dùng TRUNCATE TABLE - xóa toàn bộ dữ liệu và reset counter. Khác với DELETE (giữ nguyên counter).
1. Tạo bảng với AUTO_INCREMENT
mysql> CREATE TABLE DemoTable (
StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY
);
2. Chèn 4 hàng
mysql> INSERT INTO DemoTable VALUES (), (), (), ();
mysql> SELECT * FROM DemoTable;
+-----------+ | StudentId | +-----------+ | 1 | | 2 | | 3 | | 4 | +-----------+
3. TRUNCATE TABLE - Reset về 1
mysql> TRUNCATE TABLE DemoTable;
Kết quả: Query OK, 0 rows affected
mysql> SELECT * FROM DemoTable;
Empty set
4. Chèn lại 3 hàng - AUTO_INCREMENT bắt đầu từ 1
mysql> INSERT INTO DemoTable VALUES (), (), ();
mysql> SELECT * FROM DemoTable;
+-----------+ | StudentId | +-----------+ | 1 | | 2 | | 3 | +-----------+
So sánh TRUNCATE vs DELETE vs ALTER TABLE:
| Phương pháp | Xóa dữ liệu | Reset AUTO_INCREMENT | Trigger DELETE | Rollback |
|---|---|---|---|---|
| TRUNCATE TABLE | Có (nhanh, không log từng hàng) | CÓ (về 1) | KHÔNG | KHÔNG (DDL) |
| DELETE FROM table | Có (chậm, log từng hàng) | KHÔNG | CÓ | CÓ (DML) |
| ALTER TABLE ... AUTO_INCREMENT=1 | KHÔNG | CÓ (chỉ counter) | KHÔNG | KHÔNG (DDL) |
Lưu ý:
TRUNCATElà DDL (Data Definition Language) - commit ngầm, không rollback- Không kích hoạt
ON DELETEtrigger - Không dùng được nếu bảng có
FOREIGN KEYtham chiếu (trừ FK tự tham chiếu) - Cần quyền
DROPtrên bảng
Cách thay thế nếu không thể TRUNCATE:
DELETE FROM DemoTable; ALTER TABLE DemoTable AUTO_INCREMENT = 1;