วิธีที่ง่ายที่สุด: TRUNCATE TABLE
TRUNCATE TABLE ลบข้อมูลทั้งหมดและรีเซ็ต AUTO_INCREMENT กลับเป็น 1:
mysql> CREATE TABLE DemoTable1888 (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
);
mysql> INSERT INTO DemoTable1888 VALUES(), (), (); -- Id: 1, 2, 3
mysql> SELECT * FROM DemoTable1888;
+----+
| Id |
+----+
| 1 |
| 2 |
| 3 |
+----+
mysql> TRUNCATE TABLE DemoTable1888;
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO DemoTable1888 VALUES(), (); -- Id: 1, 2 (Reset!)
mysql> SELECT * FROM DemoTable1888;
+----+
| Id |
+----+
| 1 |
| 2 |
+----+
TRUNCATE vs DELETE
| คุณสมบัติ | TRUNCATE TABLE | DELETE FROM table |
|---|---|---|
| ความเร็ว | เร็วมาก (Drop + Recreate) | ช้ากว่า (Row by Row) |
| AUTO_INCREMENT | Reset เป็น 1 | ไม่ Reset |
| Trigger | ไม่ Fire | Fire ON DELETE |
| Rollback | ไม่ได้ (Implicit Commit) | ได้ (ใน Transaction) |
| WHERE Clause | ไม่รองรับ | รองรับ |
| Foreign Key | Error ถ้ามี FK Reference | Error/Restrict ตาม FK |
วิธีอื่น: ALTER TABLE AUTO_INCREMENT
-- รีเซ็ตเป็นค่าเฉพาะ (ไม่ลบข้อมูล)
ALTER TABLE DemoTable1888 AUTO_INCREMENT = 1;
-- ตั้งค่าเริ่มต้นใหม่
ALTER TABLE DemoTable1888 AUTO_INCREMENT = 1000;
ข้อควรระวัง
TRUNCATEทำ Implicit Commit → ไม่ Rollback ได้- ถ้ามี Foreign Key Reference → ต้อง Drop FK ก่อน หรือใช้ DELETE
- InnoDB: TRUNCATE ทำ Full Table Lock
- Partitioned Table: TRUNCATE ทำงานได้ (MySQL 5.7+)
กรณีต้องการ Reset แต่เก็บข้อมูลไว้
-- 1. สร้างตารางใหม่
CREATE TABLE new_table LIKE old_table;
ALTER TABLE new_table AUTO_INCREMENT = 1;
INSERT INTO new_table SELECT * FROM old_table;
RENAME TABLE old_table TO backup_table, new_table TO old_table;