Phân biệt truncate và delete trong sql
Bài đăng này đã không được cập nhật trong 7 năm
DELETE
- Cú pháp:
DELETE FROM table_name WHERE condition; - Hoặc nếu muốn xóa cả bảng thì chúng ta có cú pháp:
DELETE FROM table_name; - Khi chạy lệnh
DELETEthì SQL sẽ log lại từng dòng đã xóa vàotransaction log, vì thế nên khi bạn tạo 1 record mới, giá trị củaidsẽ không bắt đầu từ1mà sẽ có giá trịn+1vớinlà giá trị của record cuối cùng được tạo. - Ví dụ:
Chạy lệnh DELETE from products where productCode = 'S10_1678';
select * from products where productCode = 'S10_1678';
- Vậy là giá trị
productCode= 'S10_1678' đã bị xóa khỏi DB; - Tiếp đến là ví dụ về xóa cả bảng với
DELETE delete from products;
- Và bây giờ bảng đã trống trơn

TRUNCATE
- Cú pháp:
TRUNCATE TABLE table_name; - Đối với
TRUNCATEchúng ta chỉ có thể dùng cho bảng chứ không thể dùng cho từng record. - Khi chạy lệnh
TRUNCATEthì SQL sẽ xóa hết dữ liệu của bảng và resettransaction log, vì thế khi tạo 1 record mới, giá trị cuaidsẽ bắt đầu từ1, đây cũng chính là khác biệt lớn nhất củaDELETEvàTRUNCATE. - Ví dụ
- Chúng ta sẽ chạy lệnh
TRUNCATE table productsvới bảng ví dụ ở trên
- Như các bạn có thể thấy bản chất câu lệnh
DELETElà xóa từng row khi có 109 rows đã bị tác động cònTRUNCATEđơn giản là xóa cả 1 dữ liệu của 1 bảng không kể số lượng dòng khi có 0 rows đã bị tác động.
- 1 vài điều lưu ý
TRUNCATEkhông thể chạy được khi bảng bạn định xóa cóforeign_key(nếu bảng đó cóforeign_keytrỏ đến chính nó thì bạn có thể xóa bình thường)- Dữ liệu bị xóa bởi
DELETEcó thểrestoredđược cònTRUNCATEthì không. - Tùy vào từng trường hợp thì bạn sẽ dùng
DELETEhoặcTRUNCATE,TRUNCATEsẽ luôn nhanh hơn vì nó tiêu tốn ít bộ nhớ hơn, các bạn có thể cân nhắc điều này khi cần xóa 1 bảng lớn vs nhiều record.
All rights reserved