删除表中数据的方法有 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. IDEA 启动 Tomcat 乱码 解决办法
  2. Solaris 下 Oracle impdp 过程中出现的问题
  3. MD5计算,一个扩展类,哪里都能用
  4. Java的static,final,代码块,内部类,抽象类,接口等
  5. 数据科学入门与实战:Seaborn002热力图等
  6. 数据结构与算法分析(四)——C++实现栈
  7. python_flask框架Ubuntu16.04下环境搭建
  8. cbrt c语音_如何在C语言中实现功能重载?
  9. python中flush什么意思_python flush()定义及作用详解(实例分析)
  10. emd_visu函数_EMD方法基本基本知识
  11. 计算梯度的三种方法: 数值法,解析法,反向传播法
  12. 快速排序算法(两个指针一前一后逐步向后扫描)
  13. pythonista检测内容自动点击_Pythonista中文教程:100行代码实现一款远程键盘
  14. 印度社交市场:谁能挑战Facebook们的霸主地位?
  15. 解决无线打印机休眠后掉线无法进行局域网打印的问题
  16. 计算机辅助教育中的教学评价,计算机辅助教育的评价.ppt
  17. [附源码]计算机毕业设计JAVA海南生鲜冷链物流配送系统
  18. spring urlencode、urldecode
  19. Java金钱小写转大写
  20. 借助 frp 随时随地访问自己的树莓派

热门文章

  1. 九度OJ-1435-迷瘴(HDOJ-2570)
  2. CSS3改变图片的颜色(附gif图及源码)
  3. Django数据库orm操作以list形式获取数据库中某列所有值
  4. 6种方式,抖音变现大盘点
  5. 【了不起的开发者】华为开发者大会2020(Together)已向你发来邀请~
  6. Oracle增加一列、修改一列数据类型
  7. Webp转成其他图片格式
  8. 【游戏圈一周精选】:论网游数量与青少年视力的关系
  9. 南卡蓝牙耳机和JBL哪个好?热卖款蓝牙耳机超全面对比评测
  10. PHP输出二十六位英文字母