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

Reset AUTO_INCREMENT về 1 sau khi xóa toàn bộ dữ liệu trong MySQL

Để reset giá trị AUTO_INCREMENT về 1 sau khi xóa hết dữ liệu, kết hợp ALTER TABLE ... AUTO_INCREMENT = 1 và TRUNCATE TABLE.

Cú pháp

ALTER TABLE tên_bảng AUTO_INCREMENT = 1;
TRUNCATE TABLE tên_bảng;

Thứ tự quan trọng: ALTER trước, TRUNCATE sau. TRUNCATE sẽ reset AUTO_INCREMENT về giá trị đã thiết lập.

Ví dụ minh họa

Tạo bảng demo:

mysql> CREATE TABLE resettingPrimaryKeyDemo (
    -> UserId INT NOT NULL AUTO_INCREMENT PRIMARY KEY
    -> );
Query OK, 0 rows affected (0.66 sec)

Chèn 4 hàng (ID 1-4):

mysql> INSERT INTO resettingPrimaryKeyDemo VALUES (), (), (), ();
+--------+
| UserId |
+--------+
| 1      |
| 2      |
| 3      |
| 4      |
+--------+

Reset AUTO_INCREMENT và xóa dữ liệu:

mysql> ALTER TABLE resettingPrimaryKeyDemo AUTO_INCREMENT = 1;
Query OK, 0 rows affected (0.14 sec)

mysql> TRUNCATE TABLE resettingPrimaryKeyDemo;
Query OK, 0 rows affected (0.89 sec)

Kiểm tra bảng rỗng:

mysql> SELECT * FROM resettingPrimaryKeyDemo;
Empty set (0.00 sec)

Chèn lại 3 hàng — ID bắt đầu từ 1:

mysql> INSERT INTO resettingPrimaryKeyDemo VALUES (), (), ();
+--------+
| UserId |
+--------+
| 1      |
| 2      |
| 3      |
+--------+

Phân biệt DELETE vs TRUNCATE

Đặc điểmDELETETRUNCATE
Reset AUTO_INCREMENTKhôngCó (về 1 hoặc giá trị ALTER)
Kích hoạt TRIGGERCóKhông
Rollback đượcCó (trong transaction)Không (DDL)
Tốc độChậm (ghi log từng hàng)Rất nhanh (deallocate pages)
WHERE clauseCóKhông

Chỉ reset AUTO_INCREMENT không xóa dữ liệu

ALTER TABLE tên_bảng AUTO_INCREMENT = 1;

Giá trị tiếp theo sẽ là 1 (hoặc MAX(id)+1 nếu lớn hơn 1).

⚠️ Cảnh báo

  • Không reset AUTO_INCREMENT trên bảng production đang hoạt động
  • Nếu có FOREIGN KEY tham chiếu, TRUNCATE sẽ thất bại (cần disable FK check)
  • Replication: TRUNCATE ghi binlog, có thể gây xung đột trên Slave