Sự khác biệt giữa DELETE và TRUNCATE trong cơ sở dữ liệu MySQL và các hệ quản trị cơ sở dữ liệu quan hệ khác như SQL Server có thể được chia ra theo nhiều khía cạnh như sau:
1. Cú pháp
DELETE:
DELETE FROM table_name WHERE condition;
Hoặc để xóa tất cả các bản ghi:
DELETE FROM table_name;
TRUNCATE:
TRUNCATE TABLE table_name;
2. Xử lý trên bảng
DELETE:
Xóa từng dòng dữ liệu theo điều kiện (nếu có) hoặc toàn bộ các bản ghi nếu không có điều kiện nào được chỉ định.
Các bản ghi bị xóa sẽ được ghi lại trong log của giao dịch (transaction log), cho phép khôi phục (rollback) nếu cần thiết.
TRUNCATE:
Xóa toàn bộ các bản ghi trong bảng ngay lập tức mà không có điều kiện lọc.
Không ghi lại chi tiết từng dòng bị xóa trong transaction log, chỉ ghi sự kiện rằng bảng đã bị xóa dữ liệu. Điều này khiến TRUNCATE nhanh hơn so với DELETE khi xóa toàn bộ dữ liệu.
3. Giao dịch (Transaction)
DELETE: Hỗ trợ giao dịch. Bạn có thể thực hiện DELETE trong một transaction và sử dụng ROLLBACK để hoàn tác nếu cần.
TRUNCATE: Trong một số hệ quản trị cơ sở dữ liệu như MySQL, TRUNCATE không hỗ trợ giao dịch. Một khi dữ liệu bị xóa, bạn không thể hoàn tác bằng ROLLBACK.
4. Khóa Ngoại (Foreign Key)
DELETE: Có thể xóa dữ liệu từ một bảng có liên kết khóa ngoại, nhưng cần tuân theo các ràng buộc (constraints). Ví dụ, nếu một bảng khác có phụ thuộc vào bảng này qua khóa ngoại, bạn có thể không thể xóa bản ghi cho đến khi phụ thuộc được giải quyết.
TRUNCATE: Không thể sử dụng nếu bảng liên quan đến các khóa ngoại đang hoạt động. Bạn phải xóa các phụ thuộc hoặc xóa bảng khóa ngoại trước khi dùng TRUNCATE.
5. Hiệu suất
DELETE: Xóa từng bản ghi một và ghi lại chi tiết trong transaction log, nên sẽ chậm hơn khi xóa nhiều bản ghi.
TRUNCATE: Nhanh hơn DELETE khi xóa toàn bộ dữ liệu vì chỉ cần ghi lại rằng toàn bộ bảng đã bị xóa, thay vì từng dòng dữ liệu.
6. Kích thước bảng và chỉ mục
DELETE: Không thay đổi kích thước của bảng. Bảng vẫn giữ nguyên cấu trúc và dung lượng của nó sau khi bạn xóa dữ liệu.
TRUNCATE: Thường sẽ tái thiết lập lại không gian và chỉ mục của bảng về trạng thái ban đầu, như khi bảng mới được tạo ra. Điều này giúp giải phóng toàn bộ không gian mà dữ liệu trước đó chiếm dụng.
7. Sự khởi động lại giá trị tự động tăng (AUTO_INCREMENT)
DELETE: Không ảnh hưởng đến cột AUTO_INCREMENT. Giá trị tự động tăng tiếp tục từ giá trị cuối cùng đã sử dụng.
TRUNCATE: Đặt lại cột AUTO_INCREMENT về giá trị ban đầu, thường là 1, trong nhiều hệ quản trị cơ sở dữ liệu.
8. Kích hoạt (Trigger)
DELETE: Kích hoạt các trigger BEFORE DELETE và AFTER DELETE nếu chúng được định nghĩa trên bảng.
TRUNCATE: Không kích hoạt các trigger vì TRUNCATE không thực hiện hành động xóa từng dòng cụ thể.
9. Tình huống sử dụng
DELETE: Sử dụng khi bạn cần xóa một phần dữ liệu hoặc cần sử dụng ràng buộc khóa ngoại và trigger. Ngoài ra, khi cần kiểm soát quá trình xóa thông qua giao dịch thì DELETE là lựa chọn phù hợp.
TRUNCATE: Phù hợp khi bạn muốn xóa toàn bộ dữ liệu trong bảng một cách nhanh chóng và không cần đến khả năng khôi phục hoặc ràng buộc khóa ngoại.
Tóm tắt
Đặc điểm
DELETE
TRUNCATE
Cú pháp
DELETE FROM table_name WHERE condition;
TRUNCATE TABLE table_name;
Điều kiện
Có thể xóa theo điều kiện
Không có điều kiện
Hiệu suất
Chậm hơn do xử lý từng dòng
Nhanh hơn khi xóa toàn bộ bảng
Giao dịch
Hỗ trợ giao dịch, có thể rollback
Không hỗ trợ rollback trong một số hệ quản trị
Khóa ngoại
Có thể xóa với điều kiện ràng buộc khóa ngoại
Không thể nếu bảng có khóa ngoại
Kích thước bảng
Giữ nguyên
Giải phóng không gian
AUTO_INCREMENT
Không ảnh hưởng
Đặt lại giá trị tự động tăng
Trigger
Kích hoạt các trigger BEFORE DELETE, AFTER DELETE
Không kích hoạt trigger
Với những điểm khác biệt trên, bạn nên sử dụng DELETE khi cần xóa dữ liệu cụ thể và sử dụng TRUNCATE khi muốn xóa toàn bộ dữ liệu trong bảng một cách nhanh chóng mà không cần lo lắng về việc khôi phục.
This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.
Strictly Necessary Cookies
Strictly Necessary Cookie should be enabled at all times so that we can save your preferences for cookie settings.
If you disable this cookie, we will not be able to save your preferences. This means that every time you visit this website you will need to enable or disable cookies again.