The world's most popular open source database
TRUNCATE [TABLE] tbl_name
TRUNCATE TABLE
empties a table completely. Logically, this is equivalent to a
DELETE statement that deletes all
rows, but there are practical differences under some
circumstances.
For InnoDB,
TRUNCATE TABLE
is mapped to DELETE, so there is no
difference.
For other storage engines,
TRUNCATE TABLE
differs from DELETE in the
following ways from MySQL 4.0 onward:
Truncate operations drop and re-create the table, which is much faster than deleting rows one by one, particularly for large tables.
As of MySQL 4.1.13, truncate operations cause an implicit commit. Before 4.1.13, truncate operations are not transaction-safe; an error occurs when attempting one in the course of an active transaction.
Truncation operations cannot be performed if the session holds an active table lock.
Truncation operations do not return a meaningful value for the number of deleted rows. The usual result is “0 rows affected,” which should be interpreted as “no information.”
As long as the table format file
is valid, the table can be re-created as an empty table with
tbl_name.frmTRUNCATE
TABLE, even if the data or index files have become
corrupted.
The table handler does not remember the last used
AUTO_INCREMENT value, but starts counting
from the beginning. This is true even for
MyISAM and InnoDB, which
normally do not reuse sequence values. (Some older versions
may not reset the AUTO_INCREMENT value. In
this case, you can use ALTER TABLE
after the tbl_name AUTO_INCREMENT=1TRUNCATE
TABLE statement.)
In MySQL 3.23, TRUNCATE
TABLE is mapped to COMMIT; DELETE FROM
, so it behaves like
tbl_nameDELETE. See
Section 12.2.1, “DELETE Syntax”.
TRUNCATE TABLE
was added in MySQL 3.23.28, although from 3.23.28 to 3.23.32, the
keyword TABLE must be omitted.


User Comments
Add your own comment.