关于MySQL中的TRUNCATE语句
语法
TRUNCATE [table_name];
作用
快速清空一张表,在逻辑功能上相当于删除所有行的DELETE语句;
原理
实际上是先将表DROP,再重新创建一个表名相同的空数据表;
与DELETE语句的主要区别:
- 对于innoDB的存储引擎来说,因为innoDB是支持外键约束的,所以在有外键限制的情况下执行TRUNCATE TABLE语句时会将其映射到DELETE语句上;否则使用快速删减。重新设置AUTO_INCREAMENT计数器,这个时候不需要考虑外键的约束。
- 对于其他引擎来说,主要有以下区别:
- TRUNCATE会删除取消原表并创建一个空表,速度上比DELETE一行一行删除快速。
- TRUNCATE不能保证对事务安全;对于事务处理与表锁定的处理会发生错误。
- 使用TRUNCATE不能返回被删除行的数目。
- 只要创建表有正确的定义表结构,那么这个表不论是数据破坏或者索引文件丢失,都可以使用TRUNCATE再重新把表创建为一张空表。
- 管理表的程序不会记得最后的AUTO_INCREMENT的值,但是AUTO_INCREMENT总会从头开始进行计数。
- 当TRUNCATE作用于带分区的表时,表的数据和索引文件会被删除并且重新创建表,且分区定义文件不会受到影响。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步