10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 下载本手册
PDF(美国高级主任)- 41.6 mb
PDF (A4)- 41.7 mb
手册页(TGZ)- 262.5 kb
手册页(Zip)- 372.6 kb
信息(Gzip)- 4.0 mb
信息(邮政编码)- 4.0 mb
本手册节选

13.1.37 TRUNCATE TABLE语句

截断(表)tbl_name

截断表清空一个表。它需要下降特权。从逻辑上讲,截断表类似于删除语句,删除所有行或序列删除表而且创建表语句。

为了达到高性能,截断表绕过删除数据的DML方法。因此,它不会引起在删除触发触发,则无法执行InnoDB表,并且不能像DML操作那样回滚。然而,截断表对使用ddl支持的原子存储引擎的表的操作,如果在操作期间服务器停止,则会完全提交或回滚。有关更多信息,请参见第13.1.1节,“原子数据定义语句支持”

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

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

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

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

  • 截断表考试不及格InnoDB表或NDB表,如果有的话外键来自引用该表的其他表的约束。允许同一表的列之间存在外键约束。

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

  • 只要表定义有效,就可以将表重新创建为空表截断表,即使数据或索引文件已损坏。

  • 任何AUTO_INCREMENT值重置为初始值。这甚至适用于MyISAM而且InnoDB,通常不重用序列值。

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

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

  • 截断已损坏的InnoDB表支持。

截断表出于二进制日志记录和复制的目的,将其视为DDL而不是DML,并且始终作为语句记录。

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

在MySQL 5.7及更早版本中,在一个具有较大缓冲池和innodb_adaptive_hash_index启用,截断表操作可能会导致系统性能暂时下降,因为在删除表的自适应哈希索引项时发生了LRU扫描(Bug #68184)。重新映射截断表删除表而且创建表在MySQL 8.0中避免了有问题的LRU扫描。

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

删除一个InnoDB表中的一个表空间删除现有的表空间并创建一个新的表空间。在MySQL 8.0.21中,如果表空间是用较早的版本创建的,并且位于未知目录中,InnoDB在默认位置创建新的表空间,并将以下警告写入错误日志:DATA DIRECTORY位置必须位于已知目录中。DATA DIRECTORY位置将被忽略,文件将被放入默认的datadir位置.类定义的目录为已知目录datadirinnodb_data_home_dir,innodb_directories变量。有截断表在其当前位置创建表空间,并将该目录添加到innodb_directories运行前设置截断表