加入收藏 | 设为首页 | 会员中心 | 我要投稿 武汉站长网 (https://www.027zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

mysql当中truncate的作用_mysql8 参考手册

发布时间:2023-01-09 15:36:27 所属栏目:MySql教程 来源:网络
导读: TRUNCATE TABLE完全清空表。它需要删除权限。在逻辑上,TRUNCATE TABLE类似于删除所有行的DELETE语句,或DROP TABLE和CREATE TABLE语句的序列。
为了获得高性能,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),则在使用语句或混合日志记录模式时mysql作用,不会记录和复制该语句。(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或空,而不是删除行。

(编辑:武汉站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!