mysql当中truncate的作用_mysql8 参考手册--TRUNCATE TABLE语句好处

TRUNCATE TABLE完全清空表。它需要删除权限。在逻辑上,TRUNCATE TABLE类似于删除所有行的DELETE语句,或DROP TABLE和CREATE TABLE语句的序列。

为了获得高性能,TRUNCATE TABLE绕过了删除数据的DML方法。因此,它不会触发ON DELETE触发器,它不能对具有父子外键关系的InnoDB表执行,也不能像DML操作那样回滚。但是,对使用原子DDL支持的存储引擎的表执行TRUNCATE TABLE操作时,如果服务器在其操作期间停止,则会完全提交或回滚这些操作。

尽管TRUNCATE TABLE类似于DELETE,但它被分类为DDL语句而不是DML语句。它与DELETE的不同之处在于:

1、Truncate操作删除并重新创建表,这比逐个删除行快得多,特别是对于大型表。

2、截断操作导致隐式提交,因此无法回滚。

3、如果会话持有活动表锁,则无法执行截断操作。

4、对于InnoDB表或NDB表,如果有来自引用该表的其他表的外键约束,则TRUNCATE TABLE失败。允许在同一表的列之间使用外键约束。

5、截断操作不返回已删除行数的有意义值。通常的结果是“0行受影响”,应该解释为“无信息”

6、只要表定义有效,就可以用TRUNCATE table将表重新创建为空表,即使数据或索引文件已损坏。

7、任何自动增量值都将重置为其起始值。即使对于MyISAM和InnoDB也是如此,它们通常不重用序列值。

8、当与分区表一起使用时,TRUNCATE TABLE保留分区;也就是说,数据和索引文件将被删除并重新创建,而分区定义不受影响。

9、TRUNCATE TABLE语句不在DELETE触发器上调用。

10、支持截断损坏的InnoDB表。

TRUNCATE TABLE对于一个表,将关闭用打开的表的所有处理程序 HANDLER OPEN。

为了二进制日志记录和复制的目的,TRUNCATE TABLE被视为DROP TABLE,然后是CREATE TABLE,即DDL,而不是DML。这是因为,当使用InnoDB和其他事务存储引擎时,如果事务隔离级别不允许基于语句的日志记录(READ COMMITTED或READ UNCOMMITTED),则在使用语句或混合日志记录模式时,不会记录和复制该语句。(Bug#36763)但是,它仍然以前面描述的方式应用于使用InnoDB的复制从机。

在MySQL 5.7及更早版本中,在一个启用了innodb_adaptive_hash_index的大缓冲池系统上,由于删除表的自适应哈希索引项时发生的LRU扫描(Bug#68184),截断表操作可能会导致系统性能暂时下降。MySQL 8.0中TRUNCATE TABLE到DROP TABLE和CREATE TABLE的重映射避免了LRU扫描的问题。

TRUNCATE TABLE可用于性能架构摘要表,但其效果是将摘要列重置为0或空,而不是删除行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值