Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Sự khác biệt giữa DELETE và DROP trong SQL

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íDELETEDROP
1Mục đíchXóa một số hoặc tất cả hàng (tuple) trong bảngXóa đối tượng schema: bảng, index, constraint, database
2Phân loạiDML (Data Manipulation Language)DDL (Data Definition Language)
3Mệnh đề WHERECó WHERE để lọc hàng xóaKhông có WHERE (xóa toàn bộ đối tượng)
4Rollback (Khôi phục)Có thể ROLLBACK (trong transaction)Không thể ROLLBACK (tự commit ngầm)
5Khô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)
6Vấn đề tiềm ẩnCó 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
7TriggerKích hoạt AFTER/BEFORE DELETE triggerKhông kích hoạt trigger (đối tượng không còn tồn tại)
8Tố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ểmDELETETRUNCATEDROP
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ạiDMLDDLDDL

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.