前言:

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

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很相似,其实这三者还是与很大的不同的,下面简单对比下三者的异同。

  • 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前一定要再三检查确认,最好提前备份下表数据。

truncate数据后回收空间_Truncate用法详解相关推荐

  1. mysql删除语句详解_MySQL 删除数据语句(DELETE)用法详解

    MySQL 删除数据操作使用 DELETE FROM 语句,它属于 DML(数据操作语言)范畴,DELETE 语句是一行一行地进行删除操作,同时它会将每行的操作记录到事务日志中,以便可以进行回滚操作, ...

  2. Oracle数据泵备份与恢复 命令 expdp/impdp 用法详解

    Oracle数据泵备份与恢复 命令 expdp/impdp 用法详解 关于expdp和impdp     使用EXPDP和IMPDP时应该注意的事项: EXP和IMP是客户端工具程序,它们既可以在客户 ...

  3. mysql 空位补0_MySQL 删除数据后物理空间未释放

    MySQL 删除数据后物理空间未释放 1. 进入数据库目录: cd  /var/lib/mysql/ 2. 备份要保存的数据库文件(切记!必须备份!部分数据库文件需要恢复!) mysqldump -h ...

  4. python读取json格式文件大量数据,以及python字典和列表嵌套用法详解

    1.Python读取JSON报错:JSONDecodeError:Extra data:line 2 column 1 错误原因: JSON数据中数据存在多行,在读取数据时,不能够单单用open(), ...

  5. 删除rbd的数据后ceph空间没有释放

    删除ceph挂载卷中的数据后ceph空间没有释放 ​ ​ 有一个集群的ceph的存储空间被k8s的pod占满了,客户也不愿意扩容.现在就只能看可不可以删除一些不用的文件来释放一些存储空间,发现mysq ...

  6. python dataframe index loc_基于DataFrame筛选数据与loc的用法详解

    DataFrame筛选数据与loc用法 python中pandas下的DataFrame是一个很不错的数据结构,附带了许多操作.运算.统计等功能. 如何从一个DataFrame中筛选中出一个元素呢. ...

  7. linux 内存 参数,linux free命令参数及用法详解(linux查看内存命令)

    linux free命令参数及用法详解(linux查看内存命令) 2019年05月31日 | 萬仟网科技 | 我要评论 free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段 ...

  8. MySQL存储引擎 lnnoDB逻辑架构 innodb存储引擎表空间(ibd文件)详解 回滚日志的物理空间

    文章目录 存储引擎 一 MySQL组织架构 二 查看存储引擎信息 三 修改存储引擎 3.1 配置文件修改存储引擎 3.2 临时修改存储引擎 3.3 建表时修改存储引擎 四 存储引擎实验 五 数据库升级 ...

  9. Python函数(函数定义、函数调用)用法详解

    函数 函数就是一段封装好的,可以重复使用的代码,它使得我们的程序更加模块化,不需要编写大量重复的代码. 函数可以提前保存起来,并给它起一个独一无二的名字,只要知道它的名字就能使用这段代码.函数还可以接 ...

最新文章

  1. Use MVS Dsbame convensions. windows下ftp.exe客户端上传错误
  2. Ubuntu14.04 python 2.7环境下安装Scrapy
  3. 完美运动框架(js)
  4. 【其他】配置JIRA
  5. java层 android_Android开发实践:Java层与Jni层的数组传递
  6. Qt QWidget实现开关控件SwithButton(SlipButton)
  7. Eclipse+Maven配置
  8. PHP多坐席客服聊天系统源码完美定制版 带原生app+视频教程
  9. 如何从Alfresco中提取Language Pack
  10. java实现键盘输入_java 键盘输入的多种实现方法
  11. [Unity3D]Unity3D圣骑士当游戏开发商遭遇Mecanim动画系统
  12. java memcached delete_Memcached删除/Delete数据
  13. 微信小程序之如何注册微信小程序
  14. 弗洛伊德(Floyd)算法详解
  15. Cadence Allegro学习之查询命令+测量长度
  16. GAMES101 Lec6 反走样与深度缓冲
  17. ASP.NET正则实现表情替换为图片,如[hanx]替换为img src=img/hanx.gif/
  18. linux quota硬盘,Linux系统中quota磁盘命令的相关使用解析
  19. MySQL8.0 物理克隆接口_技术实战 MySQL 8.0.17 克隆插件分享-爱可生
  20. google adwords express使用心得

热门文章

  1. 利用HTML5的devicemotion事件实现手机摇一摇抽奖,年会抽奖
  2. Html之head部分详解
  3. TQ2440平台上LCD驱动的移植
  4. 不用中间变量交换两个变量的值
  5. 使用 Mashups4JSF 生成和消费 Mashup Feed
  6. C# 4.0 新增特性
  7. [转]ToolTip在VC中的使用
  8. 84.断点 85.显卡
  9. *36.操作系统中磁盘的调度算法
  10. C++编程语言之Lambda 函数与表达式