The difference between TRUNCATE and DELETE in SQL
TRUNCATE and DELETE provide two options when deleting table data in SQL. Understanding their different characteristics is critical to making informed decisions.
Overview
If the goal is to quickly delete all rows in a table without retaining any data, TRUNCATE is usually faster than DELETE. However, system-specific factors should also be considered.
Statement Type
TRUNCATE is classified as a Data Definition Language (DDL) statement, while DELETE is a Data Manipulation Language (DML) statement. This distinction affects their behavior in certain contexts.
Commit and rollback
Depending on the database vendor, TRUNCATE may or may not be rollbackable. PostgreSQL and SQL*Server allow TRUNCATE to be rolled back, while Oracle treats it as a committed operation.
Space Recycling
TRUNCATE reclaims storage space by releasing allocated data segments. DELETE, on the other hand, retains the space occupied by deleted rows.
Row range
TRUNCATE deletes all rows in a table, while DELETE can target specific rows based on conditions.
Object Type
TRUNCATE can be applied to a table or an entire cluster (vendor specific). DELETE works on tables and tables in a cluster.
Data object identifier
In Oracle, DELETE does not affect the data object ID, but TRUNCATE will assign a new ID unless data has been inserted into the table before.
Flashback (Oracle)
DELETE supports flashback, allowing data to be restored from a previous state. TRUNCATE, on the other hand, prevents flashback to the state before the truncation. However, Oracle 11gR2's FLASHBACK ARCHIVE feature can alleviate this problem.
Permissions
The ability to grant TRUNCATE permissions varies by vendor. Oracle requires DROP ANY TABLE permission, while other systems may allow this permission to be granted to specific users or roles.
Index
TRUNCATE in Oracle re-enables unavailable indexes. DELETE has no this effect.
Foreign Key
TRUNCATE cannot be performed if there are active foreign key references to the table. The behavior of DELETE depends on the configuration of foreign keys.
Trigger
DDL triggers can be activated by TRUNCATE operations, while DML triggers will not be fired.
Remote execution
In Oracle, TRUNCATE cannot be performed over a database link.
Identity column
In SQL*Server, TRUNCATE resets the sequence of IDENTITY columns, while DELETE does not.
The above is the detailed content of TRUNCATE vs. DELETE in SQL: When Should I Use Which?. For more information, please follow other related articles on the PHP Chinese website!