Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ลบข้อมูลทั้งหมดในตาราง MySQL ด้วย TRUNCATE TABLE

คำสั่ง TRUNCATE TABLE ใช้ลบข้อมูล ทั้งหมด ในตารางอย่างรวดเร็ว และรีเซ็ตค่า AUTO_INCREMENT กลับเป็นค่าเริ่มต้น

รูปแบบคำสั่ง

TRUNCATE TABLE yourTableName;

ตัวอย่างการใช้งาน

1. สร้างตารางและเพิ่มข้อมูล

mysql> CREATE TABLE TruncateTableDemo (
    -> BookId INT,
    -> BookName VARCHAR(200)
    -> );
Query OK, 0 rows affected (0.54 sec)

mysql> INSERT INTO TruncateTableDemo VALUES 
    -> (1001, 'C in Depth'),
    -> (1002, 'The C++ Programming'),
    -> (1003, 'Let us C');

2. ดูข้อมูลก่อนลบ

mysql> SELECT * FROM TruncateTableDemo;
+--------+---------------------+
| BookId | BookName            |
+--------+---------------------+
| 1001   | C in Depth          |
| 1002   | The C++ Programming |
| 1003   | Let us C            |
+--------+---------------------+
3 rows in set (0.00 sec)

3. ลบข้อมูลทั้งหมดด้วย TRUNCATE

mysql> TRUNCATE TABLE TruncateTableDemo;
Query OK, 0 rows affected (0.93 sec)

4. ตรวจสอบว่าข้อมูลหายหมด

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

TRUNCATE TABLE vs DELETE FROM

คุณสมบัติTRUNCATE TABLEDELETE FROM
ความเร็ว⚡ เร็วมาก (Deallocate data pages)🐢 ช้ากว่า (ลบแถวทีละแถว)
AUTO_INCREMENT✅ รีเซ็ตเป็นค่าเริ่มต้น❌ ไม่รีเซ็ต
WHERE Clause❌ ไม่รองรับ✅ รองรับ
Trigger (ON DELETE)❌ ไม่ยิง Trigger✅ ยิง Trigger
Rollback ได้หรือไม่❌ ไม่ได้ (DDL - Implicit Commit)✅ ได้ (DML)
Foreign Key Constraint❌ ล้มเหลวถ้ามี FK อ้างอิง✅ ทำงานได้ (ถ้า ON DELETE CASCADE)

เมื่อไหร่ควรใช้ TRUNCATE

  • ล้างข้อมูลทั้งตารางเพื่อโหลดข้อมูลใหม่ (ETL, Staging table)
  • รีเซ็ต AUTO_INCREMENT ให้เริ่มจาก 1 อีกครั้ง
  • ตารางขนาดใหญ่ที่ต้องการลบเร็วที่สุด

เมื่อไหร่ควรใช้ DELETE

  • ลบเฉพาะบางแถว (มี WHERE)
  • ต้องการยิง Trigger
  • ต้องการ Rollback ได้
  • มี Foreign Key อ้างอิงถึงตารางนี้