Feature |
DELETE |
TRUNCATE |
DROP |
Purpose |
Used to remove specific rows or all rows from a table while
retaining the table structure and its relationships. |
Used to quickly remove all rows from a table while retaining its
structure for future use. |
Used to completely remove a table or other database object (e.g., a
database, view, etc.), including its structure and data. |
Condition Support |
Supports a WHERE clause, allowing for deletion of
specific rows. |
Does not support a WHERE clause. It always removes all
rows from the table. |
Does not involve conditions. It removes the entire database object. |
Structure Retention |
Retains the table structure, constraints, and indexes, allowing the
table to be reused. |
Retains the table structure, constraints, and indexes but clears all
data and resets identity columns to their seed value. |
Does not retain the table structure or data; the object is
permanently removed. |
Logging |
Fully logs each row deletion in the transaction log, which can
impact performance for large datasets. |
Performs a minimally logged operation, making it faster than DELETE
for removing all rows. |
No logging for individual rows as it removes the object itself. |
Identity Reset |
Does not reset the identity column values; the next insertion
continues from the last value. |
Resets the identity column to its seed value (if an identity column
exists). |
Not applicable as the table and its structure are removed. |
Triggers Fired |
Fires any AFTER DELETE or INSTEAD OF DELETE
triggers defined on the table. |
Does not fire triggers because it does not perform row-level
operations. |
Does not fire triggers since the object is deleted at the schema
level. |
Foreign Key Restriction |
Can delete rows from a table referenced by a foreign key, but
requires careful management to maintain referential integrity. |
Cannot be used on a table that is referenced by a foreign key
constraint. |
Cannot drop a table that is referenced by a foreign key constraint
unless the constraint is dropped first. |
Performance |
Slower for large datasets due to row-by-row deletion and logging. |
Faster than DELETE for removing all rows because it is minimally
logged. |
Fastest for removing objects since it removes the schema object
directly. |
Rollback Possible |
Can be rolled back if used within an explicit transaction. |
Can only be rolled back if used within an explicit transaction. |
Cannot be rolled back once executed. |
Use Case |
When you need to delete specific rows from a table. - When
triggers need to be executed. |
When you need to quickly remove all data from a table but keep its
structure intact for reuse. |
When you no longer need a table or other object in the database
and want to free up space or avoid confusion from unused objects. |
Example Syntax |
DELETE FROM TableName WHERE Condition
DELETE FROM
TableName; -- To delete all rows |
TRUNCATE TABLE TableName; |
DROP TABLE TableName;
DROP DATABASE
DatabaseName; |