关于MySQL中的TRUNCATE语句

语法

TRUNCATE [table_name];

作用

快速清空一张表,在逻辑功能上相当于删除所有行的DELETE语句;

原理

实际上是先将表DROP,再重新创建一个表名相同的空数据表;

与DELETE语句的主要区别:

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