删除表中数据的方法有 delete 和 truncate, 其中TRUNCATE TABLE用于删除表中的所有行,而不记录单个行删除操作;TRUNCATE TABLE 与没有 WHERE 子句的 DELETE 语句类似,但是,TRUNCATE TABLE 速度更快,使用的系统资源和事务日志资源更少。下面介绍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 三者之间的异同:

  • delete语句是DML语言,操作后会放在 rollback segement 中,事物提交后才生效,如果有相应的触发器(trigger),执行时将被触发,可回滚。truncate、drop 是DDL语言,执行后会自动提交立即生效,原数据不会放到 rollback中,不能回滚,操作不会触发trigger。
  • Delete 语句每次删除一行,并在事务日志中为所删除的每行记录一项。Truncate Table 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。
  • truncate和 delete 只删除表的数据(定义),表结构及其约束、索引等保持不变;drop语句将删除表的结构、被依赖的约束(constrain)、触发器 (trigger)、索引(index),依赖于该表的存储过程/函数将保留,但是变为invalid状态。
  • truncate后会使表和索引所占用的空间会恢复到初始大小;delete操作不会减少表或索引所占用的空间,drop语句将表所占用的空间全释放掉。
  • Truncate Table 在功能上与不带 Where子句的 Delete 语句相同:二者均删除表中的全部行,但 Truncate Table 比 Delete 速度快,且使用的系统和事务日志资源少。
  • truncate只能作用于表;delete,drop可作用于表、视图。truncate 清空表中所有数据;drop一般用于删除整体性数据 ,如表、模式、索引、视图、完整性限制等;delete用于删除局部性数据 如表中的某一元组。
  • 在安全性方面,要谨慎使用 drop、truncate,特别是没有做备份的情况下:如何表数据完全不需要时可以用truncate;如果想删除部分数据可使用 delete 需要带上 where子句,回滚段要足够大;如果想删除表可以用 drop;如果想保留表而将所有数据删除且和事务无关,用truncate即可;如果和事物有关,或者想触发 trigger,则使用delete;如果是整理表内部的碎片,可以用 truncate 跟上 reuse stroage,再重新导入、插入数据。

3.truncate注意事项

无论怎样,truncate表都是高危操作,特别是在生产环境要更加谨慎使用,下面列出几点注意事项。

  • Truncate Table 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用 Delete 。如果要删除表定义及其数据,请使用 DROP TABLE 语句。
  • 对于由 Foreign Key (外键)  约束引用的表,不能使用 Truncate Table,而应使用不带 Where子句的 Delete 语句。由于 Truncate Table 不记录在日志中,所以它不能激活触发器。
  • Truncate Table 不能用于参与了索引视图的表。
  • 对用 Truncate Table 删除数据的表增加数据时,要使用Update Statistics 来维护索引信息。
  • 如果有 Rollback 语句,Delete 操作将被撤销,但 Truncate 不会撤销。
  • 执行 Truncate 需要 drop权限,不建议给账号drop权限;执行 Truncate 前一定要再三检查确认,最好提前备份下表数据。

4.truncate不宜使用场景

  • 由 FOREIGN KEY 约束引用的表(可以截断具有引用自身的外键的表)
  • 参与索引视图的表
  • 通过使用事务复制或合并复制发布的表
  • 对于具有以上一个或多个特征的表,请使用 DELETE 语句
  • TRUNCATE TABLE 不能激活触发器,因为该操作不记录各个行删除

Truncate的使用详解相关推荐

  1. mysql分区表truncate分区数据_详解MySQL分区表

    前言: 分区是一种表的设计模式,通俗地讲表分区是将一大表,根据条件分割成若干个小表.但是对于应用程序来讲,分区的表和没有分区的表是一样的.换句话来讲,分区对于应用是透明的,只是数据库对于数据的重新整理 ...

  2. mysql回滚用法_Mysql误操作后利用binlog2sql快速回滚的方法详解

    前言 在日常工作或者学习中,操作数据库时候难免会因为"大意"而误操作,需要快速恢复的话通过备份来恢复是不太可能的,下面这篇文章主要给大家介绍关于Mysql误操作后利用binlog2 ...

  3. 详解模板注入漏洞(下)

    作者 | 原作者gosecure,翻译整理shan66 来源 | http://gosecure.github.io/ 在上一篇文章中,我们为读者详细介绍了模版注入漏洞的概念,模版引擎的识别方法,以及 ...

  4. Linux日志系统-03:logrotate主配置文件详解

    logrotate主配置文件详解 一.logrotate主配置文件/etc/logrotate.conf # see "man logrotate" for details # r ...

  5. Mysql存储引擎详解(MyISAM与InnoDB的区别)

    Mysql存储引擎详解(MyISAM与InnoDB的区别) 存储引擎     MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平 ...

  6. 常用经典SQL语句大全完整版--详解+实例 (存)

    常用经典SQL语句大全完整版--详解+实例 转 傻豆儿的博客 http://blog.sina.com.cn/shadou2012  http://blog.sina.com.cn/s/blog_84 ...

  7. python之sys模块详解_(转)python之os,sys模块详解

    python之sys模块详解 原文:http://www.cnblogs.com/cherishry/p/5725184.html sys模块功能多,我们这里介绍一些比较实用的功能,相信你会喜欢的,和 ...

  8. 详解数据库引擎与SQL语句增删改查(非常详细,带例)

    数据库系统(DBMS): 专门负责数据管理的工具.增加数据.创建索引.建立索引之间的关联关系.更新索引...... 连接器:PHP要访问MySQL,可以通过API访问,也可以通过PHP的驱动,而那个驱 ...

  9. 详解Linux-I2C驱动

    目录 一.LinuxI2C驱动--概述 1.1 写在前面 1.2 I2C 1.3 硬件 1.4 软件 1.5 参考 二.LinuxI2C驱动--I2C总线 2.1 I2C总线物理结构 2.2 I2C总 ...

最新文章

  1. 2021年大数据Flink(十七):Flink四大基石
  2. 【OpenCV】图像/视频相似度测量PSNR( Peak signal-to-noise ratio) and SSIM,视频/图片转换
  3. 预写式日志(Write-Ahead Logging (WAL))
  4. centos7上安装配置tomcat8.5
  5. phpversion() 与 phpinfo()
  6. 马云/牛根生经典语录
  7. 小学听课计算机笔记范文,小学教师听课记录精选10篇【最新】.pdf
  8. 各个大学的录取通知书,哪个颜值最高?
  9. 少儿编程150讲轻松学Scratch(七)-Scratch学习中需要注意的地方
  10. c++word书签_「职场必备」干货!WORD办公软件快捷键,小编整理拿走不谢
  11. leetcode696. 计数二进制子串
  12. Skywalking-06:OAL基础
  13. ubuntu和windows上pip和windows上conda国内源更新module
  14. java 获取http地址_java如何获取当前时间,java如何获取ip地址
  15. cen7布署mysql数据库
  16. JAVA加勒比_【JAVA】synchronized关键字
  17. python采集文章_用python采集文章保存到wordpress
  18. 回顾2020年那些“领域第一本”,每一本都强烈推荐!
  19. 实验7(2019.6.18)
  20. 管理新语:依照员工能力,可以分为飞天型、登山型、平路型

热门文章

  1. 美拍之争:百度,你就从了美图秀秀吧
  2. 计算机丢失msvc80.dll,msvcp80.dll丢失怎么办_msvcp80.dll丢失的解决方法
  3. TextArea为只读而文本框颜色不发生变化
  4. Genymotion模拟器下载及安装步骤详解
  5. thinkpad yoga 12 / thinkpad s1 yoga / WS860
  6. Thinkpad X1 yoga 启动时卡在 Flashing Embedded Controller
  7. 计算机图形学头歌实训平台作业OpenGL立方体三维观察
  8. win10如何查看显卡CUDA的版本号以及显卡驱动程序版本号
  9. 项目一 简单使用 zabbix 监控核心交换机、路由器、域控制器和 mysql8数据库
  10. Dockerfile精编细作(二)构建一个简单的镜像