Truncate用法详解

前言:性能

当咱们想要清空某张表时,每每会使用truncate语句。大多时候咱们只关心可否知足需求,而不去想这类语句的使用场景及注意事项。本篇文章主要介绍truncate语句的使用方法及注意事项。code

1.truncate使用语法

truncate的做用是清空表或者说是截断表,只能做用于表。truncate的语法很简单,后面直接跟表名便可,例如: truncate table tbl_name  或者 truncate tbl_name 。索引

执行truncate语句须要拥有表的drop权限,从逻辑上讲,truncate table相似于delete删除全部行的语句或drop table而后再create table语句的组合。为了实现高性能,它绕过了删除数据的DML方法,所以,它不能回滚。尽管truncate table与delete类似,但它被分类为DDL语句而不是DML语句。事务

2.truncate与drop,delete的对比

上面说过truncate与delete,drop很类似,其实这三者仍是与很大的不一样的,下面简单对比下三者的异同。table

  • truncate与drop是DDL语句,执行后没法回滚;delete是DML语句,可回滚。
  • truncate只能做用于表;delete,drop可做用于表、视图等。
  • truncate会清空表中的全部行,但表结构及其约束、索引等保持不变;drop会删除表的结构及其所依赖的约束、索引等。
  • truncate会重置表的自增值;delete不会。
  • truncate不会激活与表有关的删除触发器;delete能够。
  • truncate后会使表和索引所占用的空间会恢复到初始大小;delete操做不会减小表或索引所占用的空间,drop语句将表所占用的空间全释放掉。

3.truncate使用场景及注意事项

经过前面介绍,咱们很容易得出truncate语句的使用场景,即该表数据彻底不须要时能够用truncate。若是想删除部分数据用delete,注意带上where子句;若是想删除表,固然用drop;若是想保留表而将全部数据删除且和事务无关,用truncate便可;若是和事务有关,或者想触发trigger,仍是用delete;若是是整理表内部的碎片,能够用truncate而后再从新插入数据。权限

不管怎样,truncate表都是高危操做,特别是在生产环境要更加当心,下面列出几点注意事项,但愿你们使用时能够作下参考。语法

  • truncate没法经过binlog回滚。
  • truncate会清空全部数据且执行速度很快。
  • truncate不能对有外键约束引用的表使用。
  • 执行truncate须要drop权限,不建议给帐号drop权限。
  • 执行truncate前必定要再三检查确认,最好提早备份下表数据。

WeChat

相关文章
相关标签/搜索