NEWS

[DATABASE] Sự khác nhau giữa hai câu lệnh TRUNCATE vs DELETE trong sqlserver

[DATABASE] Sự khác nhau giữa hai câu lệnh TRUNCATE vs DELETE trong sqlserver
Đăng bởi: Thảo Meo - Lượt xem: 2922 08:20:54, 05/06/2023C#   In bài viết

Xin chào các bạn, bài viết hôm nay mình sẻ nói về sự khác nhau giữa hai từ khóa TRUNCATE và DELETE trong cơ sở dữ liệu Sqlserver.

[DATABASE] Sự khác nhau giữa TRUNCATE vs DELETE trong SQL

Cả hai câu lệnh DELETE với TRUNCATE đều mang lại kết quả là xóa data của một bảng, tuy nhiên nếu đào sâu vào kết quả chúng lại có rất nhiều điểm khác nhau.

TRUNCATE là câu lệnh DDL, vậy nên đối tượng của nó là bảng. DELETE là câu lệnh DML nên đối tượng của nó là các dòng dữ liệu trong bảng.

1.TRUNCATE: TRUNCATE là một tuyên bố không ghi nhật ký (non-logged statement), nghĩa là nó không ghi lại mỗi thao tác xóa trong giao dịch nhật ký.
Điều này dẫn đến một số ưu điểm:

  • TRUNCATE nhanh hơn DELETE: Do không cần ghi lại các hoạt động trong nhật ký, TRUNCATE thường nhanh hơn DELETE, đặc biệt là khi xóa một lượng lớn dữ liệu.
  • Không có khả năng phục hồi: Vì TRUNCATE không ghi lại trong nhật ký, không thể hoàn tác thao tác TRUNCATE đã được thực hiện. Dữ liệu bị mất sẽ không thể khôi phục lại.
  • Không kích hoạt trigger: Khi sử dụng TRUNCATE, các trigger (khi có) không được kích hoạt. Điều này có thể là một lợi ích hoặc hạn chế, phụ thuộc vào yêu cầu của ứng dụng.

Lưu ý: Trong câu lệnh TRUNCATE bạn chỉ có thể xóa hết dữ liệu của một bảng, không thể kết hợp với mệnh đề WHERE  để xóa bảng dữ liệu có điều kiện.

 

2. DETELE

DELETE là một tuyên bố ghi nhật ký (logged statement), điều này có một số tác động quan trọng:

  • Chậm hơn so với TRUNCATE: Do phải ghi lại các thao tác xóa trong nhật ký, DELETE thường chậm hơn TRUNCATE, đặc biệt là khi xóa một lượng lớn dữ liệu.
  • Có khả năng phục hồi: Vì DELETE ghi lại trong nhật ký, thao tác DELETE có thể được hoàn tác bằng cách sử dụng các điểm phục hồi hoặc khôi phục từ bản sao dự phòng.
  • Kích hoạt trigger: DELETE sẽ kích hoạt các trigger (khi có) trên bảng. Điều này cho phép thực hiện các hành động phụ hoặc xử lý dữ liệu liên quan.

Ví dụ: Giả sử chúng ta có một bảng "Employees" với các cột "EmployeeID", "FirstName" và "LastName" chứa thông tin nhân viên. Ta muốn xóa tất cả các dòng dữ liệu từ bảng này.

  1. Sử dụng TRUNCATE:
TRUNCATE TABLE Employees;

    2. Sử dụng DELETE:

DELETE FROM Employees;

Cả hai câu lệnh trên sẽ xóa tất cả các dòng dữ liệu từ bảng "Employees".

Tuy nhiên, như đã đề cập, TRUNCATE có thể nhanh hơn DELETE và không ghi lại trong nhật ký, trong khi DELETE chậm hơn và ghi lại trong nhật ký, cho phép khôi phục lại dữ liệu nếu cần.

Lưu ý rằng TRUNCATE và DELETE đều là những thao tác mạnh mẽ và có thể xóa hoặc làm mất dữ liệu quan trọng. Hãy đảm bảo bạn đã sao lưu dữ liệu trước khi thực hiện các thao tác này và hãy cẩn thận khi sử dụng chúng.

 

Thanks for watching!

THÔNG TIN TÁC GIẢ

BÀI VIẾT LIÊN QUAN

[DATABASE] Sự khác nhau giữa hai câu lệnh TRUNCATE vs DELETE trong sqlserver
Đăng bởi: Thảo Meo - Lượt xem: 2922 08:20:54, 05/06/2023C#   In bài viết

CÁC BÀI CÙNG CHỦ ĐỀ

Đọc tiếp
.