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

ความแตกต่างระหว่าง DELETE และ DROP ใน SQL

DELETE เป็นคำสั่ง DML (Data Manipulation Language) ใช้ลบแถว/ระเบียน (Rows/Tuples) จากตาราง ในขณะที่ DROP เป็นคำสั่ง DDL (Data Definition Language) ใช้ลบโครงสร้าง (Schema Objects) เช่น ตาราง, Constraints, Index, Database ทั้งหมด

ตารางเปรียบเทียบความแตกต่างสำคัญ

ลำดับ หัวข้อ DELETE DROP
1 วัตถุประสงค์ ลบบางส่วนหรือทั้งหมดของแถวในตาราง ลบองค์ประกอบ Schema: ตาราง, Constraints, Schema ทั้งหมด
2 ประเภทภาษา DML (Data Manipulation Language) DDL (Data Definition Language)
3 Clause ใช้ WHERE กรองแถวที่จะลบได้ ไม่มี WHERE Clause
4 Rollback Rollback ได้ (ทำงานใน Buffer/Transaction Log) Rollback ไม่ได้ (ทำงานตรงโครงสร้าง metadata)
5 พื้นที่หน่วยความจำ ไม่ปล่อยพื้นที่ตาราง แม้ลบทุกแถว ปล่อยพื้นที่หน่วยความจำ
6 ปัญหาที่อาจเกิด อาจขาดหน่วยความจำ (Transaction Log ใหญ่) อาจทำให้ Memory Fragmentation

หมายเหตุ: แถว 6-8 ในตารางต้นฉบับมีข้อมูลซ้ำ/ผิด (เกี่ยวกับ PL/SQL) จึงตัดออก

คำสั่งตัวอย่าง

-- DELETE: ลบข้อมูล แต่อยู่โครงสร้างตาราง
DELETE FROM employees WHERE department_id = 10;
DELETE FROM employees;  -- ลบทุกแถว (Slow, Log ทุกแถว)

-- TRUNCATE: ลบทุกแถว เร็วกว่า DELETE รีเซ็ต Identity ไม่ Rollback ได้
TRUNCATE TABLE employees;

-- DROP: ลบตารางทั้งหมด (โครงสร้าง + ข้อมูล + Index + Constraints)
DROP TABLE employees;

-- DROP อื่นๆ
DROP INDEX idx_name ON table_name;
DROP DATABASE db_name;
DROP VIEW view_name;

สรุปการเลือกใช้

  • DELETE: ลบข้อมูลเฉพาะบางแถว ต้องการ Rollback ต้องการ Trigger ไปด้วย
  • TRUNCATE: ลบทุกแถว เร็ว ไม่ต้อง Rollback รีเซ็ต Auto Increment
  • DROP: ลบโครงสร้างตาราง/ออบเจกต์หมด ไม่กลับคืนได้

ข้อควรระวัง

  • DROP ไม่สามารถกู้คืนได้ (ยกเว้นมี Backup หรือ Flashback ในบาง DB)
  • DELETE ทุกแถวในตารางใหญ่ ใช้เวลานาน และ Transaction Log ใหญ่ → ควรแบ่ง Batch หรือใช้ TRUNCATE
  • Foreign Key Constraints อาจบล็อก DROP/DELETE ต้อง Disable/L Drop FK ก่อน