Phân biệt truncate và delete trong sql
Bài đăng này đã không được cập nhật trong 6 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
DELETE
thì 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ủaid
sẽ không bắt đầu từ1
mà sẽ có giá trịn+1
vớin
là 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
TRUNCATE
chú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
TRUNCATE
thì 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ị cuaid
sẽ bắt đầu từ1
, đây cũng chính là khác biệt lớn nhất củaDELETE
vàTRUNCATE
. - Ví dụ
- Chúng ta sẽ chạy lệnh
TRUNCATE table products
với bảng ví dụ ở trên - Như các bạn có thể thấy bản chất câu lệnh
DELETE
là 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 ý
TRUNCATE
không thể chạy được khi bảng bạn định xóa cóforeign_key
(nếu bảng đó cóforeign_key
trỏ đến chính nó thì bạn có thể xóa bình thường)- Dữ liệu bị xóa bởi
DELETE
có thểrestored
được cònTRUNCATE
thì không. - Tùy vào từng trường hợp thì bạn sẽ dùng
DELETE
hoặcTRUNCATE
,TRUNCATE
sẽ 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