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

Truncate bảng MySQL và đặt lại AUTO_INCREMENT về giá trị tùy chỉnh

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ểmTRUNCATE TABLEDELETE FROM table
Tốc độRất nhanh (deallocate pages)Chậm (xóa hàng từng hàng, log)
AUTO_INCREMENTReset về 1 (hoặc giá trị ALTER)Giữ nguyên giá trị tiếp theo
TriggerKhông kích hoạtKích hoạt DELETE trigger
RollbackKhô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ếuOK nếu ON DELETE CASCADE/SET NULL

Lưu ý

  • TRUNCATE là DDL → tự động commit, không rollback được.
  • Nếu bảng có FK được tham chiếu, TRUNCATE sẽ báo lỗi (trừ khi FOREIGN_KEY_CHECKS=0 — không khuyến khích).
  • Giá trị AUTO_INCREMENT phải > MAX(id) hiện tại (sau truncate là 0, nên 2000 OK).