删除表中数据的方法有 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. redis配置详解

    ##redis配置详解 # Redis configuration file example. # # Note that in order to read the configuration fil ...

  2. mysql中event的用法详解

    一.基本概念mysql5.1版本开始引进event概念.event既“时间触发器”,与triggers的事件触发不同,event类似与linux crontab计划任务,用于时间触发.通过单独或调用存 ...

  3. PHP mysql与mysqli事务详解

    官方对PHP连接到MySQL数据库服务器的三种主要的API简介如下: http://php.net/manual/zh/mysqli.overview.php PHP mysql与mysqli事务详解 ...

  4. python之OS模块详解

    python之OS模块详解 ^_^,步入第二个模块世界----->OS 常见函数列表 os.sep:取代操作系统特定的路径分隔符 os.name:指示你正在使用的工作平台.比如对于Windows ...

  5. MYSQL常用内置函数详解说明

    函数中可以将字段名当作变量来用,变量的值就是该列对应的所有值:在整理98在线字典数据时(http://zidian.98zw.com/),有这要一个需求,想从多音字duoyinzi字段值提取第一个拼音 ...

  6. Java程序员从笨鸟到菜鸟之(一百零二)sql注入攻击详解(三)sql注入解决办法

    sql注入攻击详解(二)sql注入过程详解 sql注入攻击详解(一)sql注入原理详解 我们了解了sql注入原理和sql注入过程,今天我们就来了解一下sql注入的解决办法.怎么来解决和防范sql注入, ...

  7. oracle表分区详解

    原文来自:http://www.cnblogs.com/leiOOlei/archive/2012/06/08/2541306.html oracle表分区详解 从以下几个方面来整理关于分区表的概念及 ...

  8. hbase shell基础和常用命令详解(转)

    HBase shell的基本用法 hbase提供了一个shell的终端给用户交互.使用命令hbase shell进入命令界面.通过执行 help可以看到命令的帮助信息. 以网上的一个学生成绩表的例子来 ...

  9. 使用 /proc 文件系统来访问 linux操作系统 内核的内容 && 虚拟文件系统vfs及proc详解

    http://blog.163.com/he_junwei/blog/static/19793764620152743325659/ http://www.01yun.com/other/201304 ...

  10. oracle impdp的table_exists_action详解

    oracle impdp的table_exists_action详解 分类: [oracle]--[备份与恢复]2012-01-06 22:44 9105人阅读 评论(0) 收藏 举报 tableac ...

随机推荐

  1. 我,PolarDB云原生数据库,5年来实现这些重磅技术创新

    简介: 过去5年,阿里云针对PolarDB进行了诸多创新,通过采用存储计算分离.软硬一体化设计,PolarDB实现成本仅为传统商业数据库的十分之一.所实现的计算.内存与存储资源的"三层解耦& ...

  2. 全面升级!揭秘阿里云智能Logo设计的AI黑科技

    简介: 免费体验!阿里云智能logo设计一直致力于用AI技术,帮助更多有设计需求的朋友能"多快好省"地做logo,让"设计logo"这件有门槛的事情,通过智能工 ...

  3. 我们为什么要做 SoloPi

    SoloPi现状 去年(2019年)7月份,蚂蚁集团正式对外开源了客户端自动化测试工具 SoloPi ,其主要包括三大模块:录制回放(用于功能测试).性能工具(用于性能测试)以及一机多控(服务于兼容性 ...

  4. 5月25日,阿里云开源 PolarDB-X 将迎来重磅升级发布

    ​简介:2022年5月25日,阿里云开源 PolarDB-X 将升级发布新版本!PolarDB-X 从 2009 年开始服务于阿里巴巴电商核心系统, 2015 年开始对外提供商业化服务,并于 2021 ...

  5. Flagger on ASM——基于Mixerless Telemetry实现渐进式灰度发布系列 3 渐进式灰度发布

    简介: 作为CNCF[成员](https://landscape.cncf.io/card-mode?category=continuous-integration-delivery&grou ...

  6. OSI模型之数据链路层

    一.简介 数据链路层在物理层提供服务的基础上向网络层提供服务,其最基本的服务是将源自网络层的数据可靠地传输到相邻节点的目标机网络层.其主要作用是加强物理层传输原始比特流的功能,将物理层提供的可能出错的 ...

  7. 【爬虫+数据清洗+可视化分析】Python舆情分析哔哩哔哩"狂飙"的评论

    目录 一.背景介绍 二.爬虫代码 2.1 展示爬取结果 2.2 爬虫代码讲解 三.可视化代码 3.1 读取数据 3.2 数据清洗 3.3 可视化 3.3.1 IP属地分析-柱形图 3.3.2 评论时间 ...

  8. tomcat(1)- tomcat服务介绍与安装

    目录 1. Tomcat介绍 2. Tomcat安装 2.1 JDK安装 2.2 Tomcat安装 3. Tomcat打开默认的管理页面 1. Tomcat介绍 JVM简介 JAVA应用都是运行在ja ...

  9. kettle使用3-增量同步(插入的时候判断数据是否存在,存在就更新,不存在就插入)

    1.新建转换 2.在DB连接中,新建2个数据库连接 3.在输入中,新建:表输入 4.在输入中,新建:表输入 5.在输出中,新建:插入/更新 说明:更新字段: 是说更新目的表时候,哪些列更新,哪些不更新 ...

  10. 使用IIS部署WebDAV

    服务器开启WebDAV 在服务器安装IIS的同时 要启用Windows身份验证与WebDAV发布 如果不是服务器版本,参照下图 在IIS中新建WebDAV网站 配置好本地目录与端口 启用Windows ...