语法
TRUNCATE [table_name];
作用
快速清空一张表,在逻辑功能上相当于删除所有行的DELETE语句;
原理
实际上是先将表DROP,再重新创建一个表名相同的空数据表;
与DELETE语句的主要区别:
- 对于innoDB的存储引擎来说,因为innoDB是支持外键约束的,所以在有外键限制的情况下执行TRUNCATE TABLE语句时会将其映射到DELETE语句上;否则使用快速删减。重新设置AUTO_INCREAMENT计数器,这个时候不需要考虑外键的约束。
- 对于其他引擎来说,主要有以下区别:
- TRUNCATE会删除取消原表并创建一个空表,速度上比DELETE一行一行删除快速。
- TRUNCATE不能保证对事务安全;对于事务处理与表锁定的处理会发生错误。
- 使用TRUNCATE不能返回被删除行的数目。
- 只要创建表有正确的定义表结构,那么这个表不论是数据破坏或者索引文件丢失,都可以使用TRUNCATE再重新把表创建为一张空表。
- 管理表的程序不会记得最后的AUTO_INCREMENT的值,但是AUTO_INCREMENT总会从头开始进行计数。
- 当TRUNCATE作用于带分区的表时,表的数据和索引文件会被删除并且重新创建表,且分区定义文件不会受到影响。