截断(表)tbl_name
截断表
清空一个表。它需要下降
特权。从逻辑上讲,截断表
类似于删除
语句,删除所有行或序列删除表
而且创建表
语句。
为了达到高性能,截断表
绕过删除数据的DML方法。因此,它不会引起在删除
触发触发,则无法执行InnoDB
表,并且不能像DML操作那样回滚。然而,截断表
对使用ddl支持的原子存储引擎的表的操作,如果在操作期间服务器停止,则会完全提交或回滚。有关更多信息,请参见第13.1.1节,“原子数据定义语句支持”.
虽然截断表
类似于删除
,它被归类为DDL语句而不是DML语句。它不同于删除
通过以下方式:
截断操作删除并重新创建表,这比逐个删除行要快得多,特别是对于大型表。
截断操作会导致隐式提交,因此不能回滚。看到13.3.3节,“导致隐式提交的语句”.
如果会话持有活动表锁,则不能执行截断操作。
截断操作不会为删除的行数返回有意义的值。通常的结果是”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位置.类定义的目录为已知目录datadir
,innodb_data_home_dir
,innodb_directories
变量。有截断表
在其当前位置创建表空间,并将该目录添加到innodb_directories
运行前设置截断表
.