Sự khác nhau giữa DELETE và TRUNCATE trong SQL

Lúc so sánh giữa delete và truncate, còn có hỏi thêm so sánh giữa truncate và drop. Nhưng trước hết, khi nói về sự khác nhau giữa delete với truncate trong sql, người ta thường nghĩ đến việc delete data trong một table. Đó là sự giống nhau giữa hai lệnh.

Khác nhau:

  1. LOG: Delete data trong một table thì Database Management System – DBMS (như MYSQL hay SQL Server) sẽ tự động log việc xóa record đó. Trong khi lệnh truncate không có log việc xóa -> cải thiện performance (nếu bạn muốn xóa data mà không muốn rollback).
  2. FOREIGN KEY: Nếu record là khóa ngoại có truncate được hay không. Ví dụ, bạn thử với PostgreSQL thì dù có hay không  có khóa ngoại, data trong table đó vẫn bị delete. Trong khi với SQL Server thì bạn sẽ không thực hiện thành công nếu  record là một khóa ngoại của một record ở table khác.
    Với delete thì như bạn đã biết, delete tất nhiên phải quan tâm đến khóa ngoại. Nếu có khóa ngoại thì mặc định sẽ không delete được.
  3. RESET IDENTITY SEED: nếu bạn delete một record trong table có integer ID là 10 thì khi bạn insert, ID tiếp theo sẽ là 11. Trong khi truncate sẽ reset lại từ đầu, đếm lại từ 0.
  4. DML vs DDL: DELETE được xếp vào lệnh DML (Data Manipulation Language) trong khi truncate được xếp vào DDL (Data Definition Language). Sơ bộ thì DML dùng để chỉnh sửa data, ví dụ: insert, update, delete
    DDL dùng để định nghĩa data structure hoặc schema, ví dụ: create table, alter table… Xem thêm sự khác nhau giữa DML và DDL.
  5. ROLLBACK: DELETE có thể rollback (undone) việc xóa record trong table trong khi TRUNCATE không thể rollback trở lại.

So sánh giữa truncate và drop:

Tập trung vào điểm chính thì: Drop là lệnh delete table luôn bao gồm toàn bộ data trong đó, indexes, triggers, constrains… Trong khi truncate chỉ xóa data trong table với các đặc điểm mà mình đã list ra ở trên khi so sánh TRUNCATE với DELETE.

Vậy, khi nói về sự khác nhau giữa DELETE và TRUNCATE, bạn chỉ cần nhớ 5 ý chính (keywords): log, foreign key, reset identity seed, DML vs DDL, rollback.

Good luck!
Tan Pham

Related Posts

Comments (1)

  1. Thach Le
    December 04, 2016

    Welcome you come back.
    Hay đó, mà trình bày chỗ foreign key đọc còn hơi lủng cũng nha m.

    Reply

Leave a Comment!

Your email address will not be published. Required fields are marked *