Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Đặt lại AUTO_INCREMENT về 1 trong MySQL bằng TRUNCATE TABLE

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ápXóa dữ liệuReset AUTO_INCREMENTTrigger DELETERollback
TRUNCATE TABLECó (nhanh, không log từng hàng)CÓ (về 1)KHÔNGKHÔNG (DDL)
DELETE FROM tableCó (chậm, log từng hàng)KHÔNGCÓCÓ (DML)
ALTER TABLE ... AUTO_INCREMENT=1KHÔNGCÓ (chỉ counter)KHÔNGKHÔNG (DDL)

Lưu ý:

  • TRUNCATE là DDL (Data Definition Language) - commit ngầm, không rollback
  • Không kích hoạt ON DELETE trigger
  • Không dùng được nếu bảng có FOREIGN KEY tham chiếu (trừ FK tự tham chiếu)
  • Cần quyền DROP trên bảng

Cách thay thế nếu không thể TRUNCATE:

DELETE FROM DemoTable;
ALTER TABLE DemoTable AUTO_INCREMENT = 1;