第一:相同点:

truncate和不带where子句的delete,以及drop 都会删除表内的数据

第二:不同点:

1. truncate和delete只删除数据不删除表的结构(定义)
    drop 语句将删除表的结构被依赖的约束(constrain)、触发器(trigger)、索引(index);依赖于该表的存储过程/函数将保留,但是变为 invalid 状态。

2. delete 语句是数据库操作语言(dml),这个操作会放到 rollback segement 中,事务提交之后才生效;如果有相应的trigger执行的时候将被触发。
truncate、drop 是数据库定义语言(ddl),操作立即生效,原数据不放到rollback segment中,不能回滚,操作不触发 trigger。

3.delete 语句不影响表所占用的extent,高水线(high watermark)保持原位置不动;
   显然drop 语句将表所占用的空间全部释放;   truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使用reuse storage;truncate 会将高水线复位(回到最开始)。

4.速度:一般来说: drop> truncate > delete

5.安全性:小心使用 drop 和 truncate,尤其没有备份的时候.,否则哭都来不及。

6.使用上:想删除部分数据行用delete,注意带上where子句. 回滚段要足够大。

想删除表,当然用drop。
                 想保留表而将所有数据删除,如果和事务无关,用truncate即可;如果和事务有关,或者想触发trigger,还是用delete。
                 如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据。

文章很简短,不知道大家有没有对drop、delete和truncate的异同有所区分?

再为大家分享一些详细内容:

(1)DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作。TRUNCATE TABLE 则一次性地从表中删除所有的数据并不把单独的删除操作记录记入日志保存,删除行是不能恢复的。并且在删除的过程中不会激活与表有关的删除触发器。执行速度快。

(2)表和索引所占空间。当表被TRUNCATE 后,这个表和索引所占用的空间会恢复到初始大小,而DELETE操作不会减少表或索引所占用的空间。drop语句将表所占用的空间全释放掉。

(3)一般而言,drop > truncate > delete

(4)应用范围。TRUNCATE 只能对TABLE;DELETE可以是table和view

(5)TRUNCATE 和DELETE只删除数据,而DROP则删除整个表(结构和数据)。

(6)truncate与不带where的delete :只删除数据,而不删除表的结构(定义)drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger)索引(index);依赖于该表的存储过程/函数将被保留,但其状态会变为:invalid。

(7)delete语句为DML(data maintain Language),这个操作会被放到rollback segment中,事务提交后才生效。如果有相应的 tigger,执行的时候将被触发。

(8)truncate、drop是DLL(data define language),操作立即生效,原数据不放到 rollback segment中,不能回滚

(9)在没有备份情况下,谨慎使用 drop 与 truncate。要删除部分数据行采用delete且注意结合where来约束影响范围。回滚段要足够大。要删除表用drop;若想保留表而将表中数据删除,如果于事务无关,用truncate即可实现。如果和事务有关,或老师想触发trigger,还是用delete。

(10)Truncate table 表名 速度快,而且效率高,因为:
truncate table 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。

(11)TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用 DELETE。如果要删除表定义及其数据,请使用 DROP TABLE 语句。

(12)对于由 FOREIGN KEY 约束引用的表,不能使用 TRUNCATE TABLE,而应使用不带WHERE子句的DELETE 语句。由于TRUNCATE TABLE不记录在日志中,所以它不能激活触发器。

以上就是本文的全部内容,希望对大家的学习有所帮助。

详解SQL中drop、delete和truncate的异同相关推荐

  1. SQL语法中drop,delete与truncate的区别

    SQL语法中drop,delete与truncate的区别 delete是DML语句,可以选择删除部分数据,也可以选择删除全部数据:删除的数据可以回滚:不会释放空间 drop是DDL语句,删除表结构和 ...

  2. 详解SQL中Groupings Sets 语句的功能和底层实现逻辑

    前言 SQL 中  Group By  语句大家都很熟悉, 根据指定的规则对数据进行分组 ,常常和 聚合函数 一起使用. 比如,考虑有表  dealer ,表中数据如下: 如果执行 SQL 语句  S ...

  3. Case When语句详解SQL中Case When的用法

    SQL中case when的用法 case when类似于编程语言中的if else判断.switch case语句.该语句执行时先对条件进行判断,然后根据判断结果做出相应的操作. Case具有两种格 ...

  4. sql去重复操作详解SQL中distinct的用法

    在表中,可能会包含重复值.这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值.关键词 distinct用于返回唯一不同的值. 表A: 表B: 1.作用于单列 select dist ...

  5. mysql truncate drop_详解MySQL中DROP,TRUNCATE 和DELETE的区别实现mysql从零开始 | 很文博客...

    不同点: 1. truncate和 delete只删除数据不删除表的结构(定义) drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该 ...

  6. 详解MySQL中DROP,TRUNCATE 和DELETE的区别

    注意:这里说的delete是指不带where子句的delete语句 相同点: truncate和不带where子句的delete, 以及drop都会删除表内的数据 不同点: 1. truncate和  ...

  7. 详解SQL中的触发器

    ● 原因 ● 触发器 ○ 简介 ○ 分类 ○ INSERTED和DELETED ○ 优缺点 ● 语法 ○ 建立触发器 ○ 删除触发器 ○ 修改触发器 ○ 开启和禁用 ○ 提醒和保护 ● 示例 原因 今 ...

  8. 详解SQL中几种常用的表连接方式!

    导读:数据库性能优化最主要的就是SQL优化,SQL优化的关键离不开三点:表的连接方式.访问路径和执行顺序,本文重点介绍几种常见的连接方式. 多表关联查询,查询优化器的执行步骤具体如下. 1)访问路径: ...

  9. mysql中groupby用法_详解SQL中GroupBy的用法

    GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组. 1.概述 "Group By"从字面意义上理解就是根据"By"指定的规则对数据进行分 ...

最新文章

  1. ie旋转滤镜Matrix
  2. pythonselenium浮动框_python上selenium的弹框操作实现
  3. (5.2) Tomcat 8 源码, 初始化组件
  4. 算法提高课-搜索-最短路模型-AcWing 1076. 迷宫问题:bfs最短路、路径
  5. 统一的定义导航栏的背景颜色(NavigationController)
  6. bootbox显示中文的按钮
  7. mysql编译安装后目录空_MySQL源码安装完成后修改安装路径启动问题
  8. 基于 Token 的身份验证方法
  9. Hadoop--克隆3x虚拟机
  10. 韭菜财经大数据:《2019年内容创业市场报告》
  11. 阿里、京东、拼多多电商三巨头财报大比拼:拼多多用户数上拼了 京东营收超过阿里...
  12. [洛谷P3376题解]网络流(最大流)的实现算法讲解与代码
  13. HMC_Hamiltonian Monte Carlo 推导,代码
  14. Packet Tracer 5.0建构CCNA实验攻略——帧中继Frame Relay
  15. 1.Direct2D 捕鱼游戏开发-流程介绍
  16. k8s-linux上安装
  17. 功能测试非常重要的43个功能测试点...
  18. 大学计算机实验六实验报告,大学计算机实验6 实验报告.pdf
  19. c语言中换行符的ans2码,二级C语言复习
  20. 对软件测试团队“核心价值”的思考(来自 李云)

热门文章

  1. 代码内查找函数引用_叮~~二级操作题 excel常考函数大梳理
  2. linux下的遥控器软件下载,Linux操作系统下遥控器的配置及使用方法
  3. [渝粤教育] 天津城建大学 混凝土结构设计原理A 参考 资料
  4. 【渝粤教育】国家开放大学2018年春季 4992T农村文化建设 参考试题
  5. 【渝粤教育】国家开放大学2018年春季 0014-22T秘书学(一) 参考试题
  6. [渝粤教育] 西南科技大学 质量与可靠性管理 在线考试复习资料
  7. 【渝粤题库】广东开放大学 会展概论 形成性考核
  8. 【渝粤题库】国家开放大学2021春2625调剂学题目
  9. AX5243与AX5043方案对比及应用设计
  10. 网络 计算机不显示不出来,网页图片显示不出来怎么办 网络故障解决【详解】...