截断(表)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节“性能架构汇总表”.