T-SQL cung cấp hai từ khóa cho phép bạn xóa dữ liệu khỏi bảng. Họ XÓA và TRUNCATE . Chúng giống nhau về những gì chúng đang làm, tuy nhiên, chúng sử dụng các phương pháp rất khác nhau. Trong bài viết này, chúng tôi thảo luận về các cơ chế cơ bản cho những từ khóa này.
Sự khác biệt giữa TRUNCATE và DELETE
TRUNCATE:
- TRUNCATE là một lệnh DDL.
- TRUNCATE TABLE luôn khóa bảng và trang. Tuy nhiên, nó không khóa từng hàng.
- Không thể sử dụng điều kiện WHERE.
- Lệnh xóa tất cả dữ liệu.
- BẢNG TRUNCATE không thể kích hoạt trình kích hoạt vì thao tác này không ghi nhật ký các lần xóa hàng riêng lẻ.
- Hiệu suất nhanh hơn vì nó không lưu giữ nhật ký.
- Có thể khôi phục.
XÓA:
- DELETE là một Lệnh DML.
- Câu lệnh DELETE sử dụng một khóa hàng trong khi thực thi. Mỗi hàng trong bảng bị khóa để xóa.
- Bạn có thể chỉ định các bộ lọc trong mệnh đề WHERE.
- Lệnh sẽ xóa dữ liệu được chỉ định nếu điều kiện WHERE tồn tại.
- DELETE kích hoạt trình kích hoạt vì các hoạt động được ghi lại riêng lẻ.
- DELETE chậm hơn TRUNCATE vì nó lưu giữ nhật ký.
- Có thể khôi phục.
Làm cách nào để xóa dữ liệu với sự trợ giúp của TRUNCATE?
Ví dụ sau đây loại bỏ tất cả dữ liệu khỏi bảng Person. CHỌN các câu lệnh được đưa vào trước và sau BẢNG TRUNCATE câu lệnh để so sánh kết quả.
USE AdventureWorks2012;
GO
SELECT COUNT(*) AS BeforeTruncateCount
FROM Person.Person;
GO
TRUNCATE TABLE Person.Person;
GO
SELECT COUNT(*) AS AfterTruncateCount
FROM Person.Person;
GO
Hãy nêu một số ưu điểm.
BẢNG TRUNCATE lệnh xóa tất cả các hàng khỏi bảng bằng cách phân bổ các trang dữ liệu được sử dụng để lưu trữ dữ liệu bảng. Sau khi hoàn thành thao tác, bảng không chứa trang nào. Nó không ghi nhật ký cho việc xóa hàng riêng lẻ. Lệnh ghi lại vị trí giao dịch của trang vào nhật ký giao dịch. TRUNCATE lệnh sử dụng ít không gian đăng nhập hơn. Thường ít khóa hơn được sử dụng. Lệnh xóa tất cả các hàng khỏi bảng, nhưng cấu trúc bảng và các cột, ràng buộc, chỉ mục, v.v. của nó vẫn còn. Để loại bỏ bảng. bạn cần sử dụng DROP TABLE .
Nếu một bảng chứa một cột nhận dạng, thì bộ đếm cho cột đó được đặt lại thành giá trị gốc được xác định cho cột. Nếu không có hạt giống nào được xác định, giá trị mặc định 1 được sử dụng. Để giữ lại bộ đếm danh tính, hãy sử dụng XÓA thay vào đó.
Xóa tất cả các hàng bằng DELETE
Ví dụ sau đây xóa tất cả các hàng khỏi bảng Person:
DELETE FROM Person.Person;
GO
XÓA loại bỏ từng hàng một. Lệnh thêm bản ghi mới vào nhật ký giao dịch cho mỗi hàng đã xóa. XÓA sử dụng khóa hàng trong khi thực thi, có nghĩa là mỗi hàng trong bảng bị khóa để xóa. Sau khi XÓA được thực thi, một bảng vẫn có thể chứa các trang dữ liệu trống. Ví dụ:không thể phân bổ các trang trống trong heap mà không có ít nhất một khóa bảng (LCK_M_X) độc quyền. XÓA và TRUNCATE cả hai đều có thể được cuộn lại khi được sử dụng với TRANSACTION .
Cũng đọc
Sự khác biệt giữa bảng DELETE và TRUNCATE trong SQL Server