10bet网址
MySQL 5.7参考手册
相关的文档10bet官方网站 本手册下载 本手册节选

13.1.34 TRUNCATE TABLE语句

截断(表)tbl_name

截断表完全清空一个表。它要求下降特权。

从逻辑上讲,截断表类似于删除语句,该语句删除所有行或删除表而且创建表语句。为了实现高性能,它绕过了删除数据的DML方法。因此,它不能回滚,它不引起在删除触发,并且不能执行InnoDB具有父子外键关系的表。

虽然截断表类似于删除,它被归类为DDL语句而不是DML语句。它不同于删除可以通过以下方式:

  • 截断操作删除并重新创建表,这比逐个删除行要快得多,特别是对于大型表。

  • 截断操作会导致隐式提交,因此不能回滚。看到第13.3.3节“导致隐式提交的语句”

  • 如果会话持有活动表锁,则不能执行截断操作。

  • 截断表失败对于一个InnoDB表或NDB表,如果有的话外键来自引用该表的其他表的约束。允许在同一表的列之间存在外键约束。

  • 截断操作不会为删除的行数返回有意义的值。通常的结果是0行受影响,应该解释为没有信息。

  • 只要表格式文件tbl_name.frm有效时,可以将表重新创建为空表截断表,即使数据或索引文件已经损坏。

  • 任何AUTO_INCREMENT值重置为其初始值。这是对的MyISAM而且InnoDB,它们通常不会重用序列值。

  • 当使用分区表时,截断表保留分区;也就是说,数据和索引文件被删除并重新创建,而分区定义(.par)文件不受影响。

  • 截断表语句不调用在删除触发器。

截断表为了二进制日志记录和复制的目的,被视为DDL而不是DML,并且总是作为一条语句进行记录。

截断表对于一个表,关闭打开该表的所有处理程序处理程序打开

在一个大的系统上InnoDB缓冲池和innodb_adaptive_hash_index启用,截断表操作可能会导致系统性能暂时下降,因为在删除一个InnoDB表的自适应哈希索引项。这个问题已经解决了删除表在MySQL 5.5.23 (Bug #13704145, Bug #64284),但仍然是一个已知的问题截断表(错误# 68184)。

截断表可以与性能模式汇总表一起使用,但其效果是将汇总列重置为0或,而不是删除行。看到第25.12.15节“性能架构汇总表”