DELETE là lệnh DML (Data Manipulation Language) xóa dữ liệu (hàng) trong bảng. DROP là lệnh DDL (Data Definition Language) xóa đối tượng schema (bảng, index, view, constraint, database). Chúng khác nhau hoàn toàn về mục đích, hành vi và khả năng khôi phục.
Bảng so sánh chi tiết
| # | Tiêu chí | DELETE | DROP |
| 1 | Mục đích | Xóa một số hoặc tất cả hàng (tuple) trong bảng | Xóa đối tượng schema: bảng, index, constraint, database |
| 2 | Phân loại | DML (Data Manipulation Language) | DDL (Data Definition Language) |
| 3 | Mệnh đề WHERE | Có WHERE để lọc hàng xóa | Không có WHERE (xóa toàn bộ đối tượng) |
| 4 | Rollback (Khôi phục) | Có thể ROLLBACK (trong transaction) | Không thể ROLLBACK (tự commit ngầm) |
| 5 | Không gian lưu trữ | Không giải phóng (bảng vẫn tồn tại, high-water mark không đổi) | Giải phóng hoàn toàn (bảng biến mất, không gian trả về OS) |
| 6 | Vấn đề tiềm ẩn | Có thể thiếu bộ nhớ (log transaction lớn khi xóa nhiều hàng) | Có thể gây phân mảnh (fragmentation) không gian |
| 7 | Trigger | Kích hoạt AFTER/BEFORE DELETE trigger | Không kích hoạt trigger (đối tượng không còn tồn tại) |
| 8 | Tốc độ | Chậm (ghi log từng hàng) | Rất nhanh (chỉ cập nhật metadata) |
Ví dụ minh họa
DELETE - Xóa dữ liệu, giữ cấu trúc
-- Xóa hàng cụ thể
DELETE FROM Employees WHERE EmployeeId = 101;
-- Xóa tất cả hàng (bảng vẫn còn, identity không reset)
DELETE FROM Employees;
-- Nhanh hơn cho xóa toàn bảng (ít log hơn, reset identity)
TRUNCATE TABLE Employees;
DROP - Xóa đối tượng hoàn toàn
-- Xóa bảng hoàn toàn (cấu trúc + dữ liệu + index + constraint)
DROP TABLE Employees;
-- Xóa index
DROP INDEX idx_name ON Employees;
-- Xóa database
DROP DATABASE CompanyDB;
TRUNCATE: Trung gian giữa DELETE và DROP
| Đặc điểm | DELETE | TRUNCATE | DROP |
| Xóa dữ liệu | ✅ | ✅ | ✅ (cùng cấu trúc) |
| Giữ cấu trúc bảng | ✅ | ✅ | ❌ |
| Reset AUTO_INCREMENT | ❌ | ✅ | N/A |
| Có WHERE | ✅ | ❌ | ❌ |
| Kích hoạt Trigger | ✅ | ❌ | ❌ |
| Rollback được | ✅ | ❌ (MySQL) / ✅ (SQL Server trong TX) | ❌ |
| Phân loại | DML | DDL | DDL |
Tóm tắt: Dùng cái nào khi nào?
- DELETE: Xóa một vài hàng cụ thể, cần WHERE, cần rollback, cần trigger.
- TRUNCATE: Xóa toàn bộ dữ liệu bảng, muốn reset ID, không cần rollback, nhanh.
- DROP: Xóa hẳn bảng/index/view/database, không dùng nữa.