Truncate(清空表中的内容)⽤法详解

1.truncate使⽤语法
truncate的作⽤是清空表或者说是截断表,只能作⽤于表。truncate的语法很简单,后⾯直接跟表名即可,例如: truncate tabletbl_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很相似,其实这三者还是与很⼤的不同的,下⾯简单对⽐下三者的异同。

  • 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前⼀定要再三检查确认,最好提前备份下表数据。
  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值