In SQL, the
TRUNCATE TABLE statement is a Data Definition Language (DDL) operation that marks the extents of a table for deallocation (empty for reuse). The result of this operation quickly removes all data from a table, typically bypassing a number of integrity enforcing mechanisms. It was officially introduced in the SQL:2008 standard.
TRUNCATE TABLE removes all rows from a table, but the table structure and its columns, constraints, indexes, and so on remain. To remove the table definition in addition to its data, use the DROP TABLE statement.
TRUNCATE TABLE mytable statement is logically (though not physically) equivalent to the
DELETE FROM mytable statement (without a
WHERE clause). The following characteristics distinguish
TRUNCATE TABLE from
TRUNCATEis implicitly preceded and followed by a commit operation. (This may also be the case in MySQL, when using a transactional storage engine.)
TRUNCATE TABLEquickly deletes all records in a table by deallocating the data pages used by the table. This reduces the resource overhead of logging the deletions, as well as the number of locks acquired. Records removed this way cannot be restored in a rollback operation. Two notable exceptions to this rule are the implementations found in PostgreSQL and Microsoft SQL Server, both of which allow
TRUNCATE TABLEstatements to be committed or rolled back transactionally.
WHEREclause in a
TRUNCATE TABLEstatement—it is all or nothing.
TRUNCATE TABLEcannot be used when a foreign key references the table to be truncated, since
TRUNCATE TABLEstatements do not fire triggers. This could result in inconsistent data because
ON UPDATEtriggers would not fire.
TRUNCATE TABLEresets the count of an Identity column back to the identity's seed.
TRUNCATE TABLEstatements can be used for tables involved in log shipping.
TRUNCATE TABLEin 9.7 or later.
Edited: 2021-06-19 17:54:36