ใช้ TRUNCATE TABLE แทน DELETE เพื่อลบข้อมูลทั้งหมดและรีเซ็ต AUTO_INCREMENT ให้เริ่มจาก 1 ใหม่
ปัญหาของ DELETE
mysql> DELETE FROM DemoTable1796; -- ลบข้อมูลทั้งหมด
mysql> INSERT INTO DemoTable1796(StudentName) VALUES('John Doe');
mysql> SELECT * FROM DemoTable1796;
+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 4 | John Doe | -- ❌ Auto Increment ไม่รีเซ็ต (ต่อจาก 3)
+-----------+-------------+
วิธีแก้: ใช้ TRUNCATE TABLE
1. สร้างตารางมี AUTO_INCREMENT
mysql> CREATE TABLE DemoTable1796 (
StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentName VARCHAR(20)
);
Query OK, 0 rows affected (0.00 sec)
2. เพิ่มข้อมูล 3 แถว
mysql> INSERT INTO DemoTable1796(StudentName) VALUES('Chris Brown');
mysql> INSERT INTO DemoTable1796(StudentName) VALUES('David Miller');
mysql> INSERT INTO DemoTable1796(StudentName) VALUES('John Doe');
mysql> SELECT * FROM DemoTable1796;
+-----------+--------------+
| StudentId | StudentName |
+-----------+--------------+
| 1 | Chris Brown |
| 2 | David Miller |
| 3 | John Doe |
+-----------+--------------+
3. ลบข้อมูลด้วย TRUNCATE
mysql> TRUNCATE TABLE DemoTable1796; Query OK, 0 rows affected (0.00 sec)
4. Insert ใหม่ -> ID เริ่มจาก 1 อีกครั้ง
mysql> INSERT INTO DemoTable1796(StudentName) VALUES('John Doe');
mysql> SELECT * FROM DemoTable1796;
+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 1 | John Doe | -- ✅ รีเซ็ตเป็น 1 แล้ว
+-----------+-------------+
เปรียบเทียบ DELETE vs TRUNCATE
| คุณสมบัติ | DELETE | TRUNCATE |
|---|---|---|
| รีเซ็ต AUTO_INCREMENT | ❌ ไม่รีเซ็ต | ✅ รีเซ็ตเป็น 1 |
| Trigger (ON DELETE) | ✅ ทำงาน | ❌ ไม่ทำงาน |
| Rollback (Transaction) | ✅ ได้ (ใน Transaction) | ❌ ไม่ได้ (DDL - Implicit Commit) |
| WHERE Clause | ✅ รองรับ | ❌ ไม่รองรับ (ลบทั้งตาราง) |
| ความเร็ว | ช้ากว่า (Log ทีละแถว) | เร็วมาก (Deallocate Data Pages) |
| Foreign Key Constraint | ตรวจสอบ FK | ล้มเหลวถ้ามี FK อ้างอิง |
วิธีอื่น: รีเซ็ต AUTO_INCREMENT โดยไม่ลบข้อมูล
ALTER TABLE DemoTable1796 AUTO_INCREMENT = 1;
หมายเหตุ: จะมีผลก็ต่อเมื่อค่าสูงสุดปัจจุบัน < 1 (ตารางว่าง) มิฉะนั้นจะเซ็ตเป็น MAX(id)+1
สรุป
ต้องการลบทุกข้อมูลและรีเซ็ต ID ให้เริ่มจาก 1 ใช้ TRUNCATE TABLE (เร็ว แต่อย่าใช้ถ้ามี FK หรือต้องการ Trigger) หากต้องการลบบางส่วน ใช้ DELETE แล้วค่อย ALTER TABLE ... AUTO_INCREMENT = 1 (ตารางต้องว่าง)