The SQL TRUNCATE TABLE statement is a useful statement for removing data in SQL. I’ll explain what the statement does and show you some examples in this article.
This article applies to Oracle, SQL Server, MySQL, and PostgreSQL.
Table of Contents
What Does the SQL TRUNCATE TABLE Statement Do?
The SQL TRUNCATE statement, or TRUNCATE TABLE statement, removes all data from a table.
TRUNCATE TABLE Syntax
The syntax for the SQL TRUNCATE statement is slightly different in each database.
The basic TRUNCATE statement looks the same:
TRUNCATE TABLE [schema_name.]table_name
- schema_name: This is optional. If your table belongs to a different schema, you specify it here.
- table_name: The name of the table to remove the data from.
However, there are several options unique to each database.
So what do all of these parameters mean?
- PRESERVE MATERIALIZED VIEW LOG: Optional, and default. If you specify this, then the materialized view log will be preserved when you truncate the table.
- PURGE MATERIALIZED VIEW LOG: Optional. If you specify this, then the materialized view log will be purged when you truncate the table.
- DROP STORAGE: Optional, and default. If you specify this, all storage that is allocated to the truncated rows will be deallocated (except the space allocated by MINEXTENTS).
- REUSE STORAGE: If you specify this, all storage that is allocated to the truncated rows will remain allocated to the table.
- WITH PARTITIONS: Specifies the partitions to truncate or from which all rows are removed.
- RESTART IDENTITY: Automatically restarts the sequences owned by columns of this table.
- CONTINUE IDENTITY: Does not change the values of sequences. This is the default.
- CASCADE: Automatically truncate all tables that have foreign key references to this table.
- RESTRICT: Does not truncate any tables that have foreign key references to this table. This is the default.
What’s the Difference Between TRUNCATE and DELETE?
So what’s the difference between the TRUNCATE and DELETE statements?
DELETE can delete specific records, TRUNCATE deletes all records
You may have noticed that there is no WHERE clause on the TRUNCATE statement. This is because all of the data in the table is removed when you run a TRUNCATE statement.
With the DELETE statement, you can delete all records, or use the WHERE clause to delete some records.
DELETE Allows You To Rollback, TRUNCATE Does Not Allow Rollback
With the DELETE statement, you can run a ROLLBACK statement and effectively restore the data you have deleted. However, if you run the ROLLBACK statement after a TRUNCATE statement, then you won’t be able to recover the data. You can’t rollback a TRUNCATE statement.
DELETE generates an undo log, TRUNCATE does not
This is what makes TRUNCATE statements faster than DELETE statements. When you run a DELETE statement, the undo log is generated so that the ROLLBACK statement can be run.
DELETE takes locks on rows, TRUNCATE does not
When you run a DELETE statement, the rows are locked while they are deleted. With the TRUNCATE statement, they are not locked.
DELETE causes delete triggers to fire, TRUNCATE does not
If you use triggers, this might cause different behaviour in your database.
DELETE is a DML command, TRUNCATE is a DDL command.
This difference means that DELETE can be rolled back and TRUNCATE cannot.
SQL TRUNCATE TABLE Examples
Let’s take a look at some examples of the TRUNCATE TABLE statement.
Example 1 – Basic Truncate
This is a basic TRUNCATE statement.
TRUNCATE TABLE student;
Example 2 – Materalized View Log (Oracle)
This example uses the PRESERVE MATERIALIZED VIEW LOG keyword. Related: SQL Views: The Complete Guide.
TRUNCATE TABLE student PRESERVE MATERIALIZED VIEW LOG;
Example 3 – Storage (Oracle)
This example uses the REUSE STORAGE command.
TRUNCATE TABLE student REUSE STORAGE;
Example 4 – All Parameters (Oracle)
This example uses both the “materialized view log” parameter and the “storage” parameter.
TRUNCATE TABLE student PRESERVE MATERIALIZED VIEW LOG DROP STORAGE;
Example 5 – Restart Identity (PostgreSQL)
This example uses the Restart Identity parameter in PostgreSQL to restart the sequences related to this table.
TRUNCATE TABLE student RESTART IDENTITY;
As you can see, the TRUNCATE TABLE statement is pretty simple to use. In most cases, you can just run the “TRUNCATE TABLE tablename” command.
Truncate Table in a Stored Procedure
Are you trying to run a TRUNCATE TABLE statement inside a stored procedure? And are you getting an error?
Your procedure may look like this:
CREATE PROCEDURE testProc IS BEGIN TRUNCATE TABLE tablename; END testProc;
If you run this, you might get an error.
This error happens because the stored procedure is running the DDL statement, and some instances of the DDL could invalidate the stored procedure.
To resolve it, you could run the command as Execute Immediate.
Change your stored procedure to call the TRUNCATE statement like this:
CREATE PROCEDURE testProc IS BEGIN EXECUTE IMMEDIATE 'TRUNCATE TABLE tablename'; END testProc;
This procedure should now run successfully.
So, that’s how you use the TRUNCATE statement, and how it’s different to the DELETE statement.
Lastly, if you enjoy the information and career advice I’ve been providing, sign up to my newsletter below to stay up-to-date on my articles. You’ll also receive a fantastic bonus. Thanks!
Want My Set of SQL Cheat Sheets?
Get my set of SQL cheat sheets: common commands and syntax for Oracle, SQL Server, MySQL, and PostgreSQL - to save you time.