mysql truncate语句_MySQL的SQL语句 - 数据定义语句(19)- TRUNCATE TABLE 语句

TRUNCATE TABLE 语句

1. TRUNCATE [TABLE] tbl_name

TRUNCATE TABLE 语句完全清空表。它需要 DROP 权限。从逻辑上讲,TRUNCATE TABLE 类似于删除所有行的 DELETE 语句,或者是 DROP TABLE 和 CREATE TABLE 语句的组合。

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

虽然 TRUNCATE TABLE 与 DELETE 类似,但它被归为 DDL 语句,而不是 DML 语句。与 DELETE 有以下几个不同之处:

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

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

● 如果会话有生效的表锁定,则无法执行截断操作。

● 对于 InnoDB 或 NDB 表,如果有其他表引用该表的 FOREIGN KEY 约束,TRUNCATE TABLE 命令就会失败。允许在同一表的列之间进行外键约束。

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

● 只要表定义有效,即使数据或索引文件已损坏,也可以使用 TRUNCATE TABLE 语句将表重新创建为空表。

● 任何 AUTO_INCREMENT 值将被重置为它的初始值。即使对于通常不重用序列值的 MyISAM 和 InnoDB 也是如此。

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

● TRUNCATE TABLE 语句不会引发 ON DELETE 触发器。

● 支持截断损坏的 InnoDB 表。

对一个表执行 TRUNCATE TABLE 语句,将关闭通过 HANDLER OPEN 对该表打开的所有句柄。

从二进制日志记录和复制的角度看,TRUNCATE TABLE 类似于 DROP TABLE 后面紧跟 CREATE TABLE 语句,即 DDL 而不是 DML。这是因为,当使用 InnoDB 和其他事务存储引擎时,如果事务隔离级别不允许基于语句的日志记录( READ COMMITTED 或 READ UNCOMMITTED ),则在使用 STATEMENT 或 MIXED 日志模式时,不会记录和复制语句。但是,它仍然以前面描述的方式应用于使用 InnoDB 的副本。

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

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

截断独立表空间中的 InnoDB 表,将删除现有表空间并创建一个新表空间。从 MySQL 8.0.21 开始,如果表空间是用早期版本创建的,并且位于一个未知的目录中,InnoDB 会在默认的位置创建新的表空间,并在错误日志中写入如下警告:The DATA DIRECTORY location must be in a known directory. The DATA DIRECTORY location will be ignored and the file will be put into the default datadir location. 已知的目录是由 datadir、innodb_data_home_dir 和 innodb_directory 变量定义的目录。要让 TRUNCATE TABLE 在当前位置创建表空间,请在运行 TRUNCATE TABLE 之前将目录添加到 innodb_directory 设置中。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值