DELETE、TRUNCATE、DROP三种删除语句联系与区别

相同点:

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

  2.drop、truncate都是DDL语句(数据定义语言),执行后会自动提交。

不同点:

  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,尤其没有备份的时候.否则哭都来不及
  使用上,想删除部分数据行用 delete,注意带上where子句. 回滚段要足够大.
  想删除表,当然用 drop
  想保留表而将所有数据删除,如果和事务无关,用truncate即可。如果和事务有关,或者想触发trigger,还是用delete。
  如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据。

  6.delete是DML语句,不会自动提交。drop/truncate都是DDL语句,执行后会自动提交。

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

  8、TRUNCATE   TABLE   删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用   DELETE。如果要删除表定义及其数据,请使用   DROP   TABLE   语句。  
    
  9、对于由   FOREIGN   KEY   约束引用的表,不能使用   TRUNCATE   TABLE,而应使用不带   WHERE   子句的   DELETE   语句。由于   TRUNCATE   TABLE   不记录在日志中,所以它不能激活触发器。

  10、TRUNCATE   TABLE   不能用于参与了索引视图的表。

转载于:https://www.cnblogs.com/GHzz/p/9541672.html

sql几种删除语句的联系与区别相关推荐

  1. sql中几种删除语句的比较和基础用法

    sql中有三种删除语句 delete.drop.truncate 1.delete 基础用法:delete from table(表名) [where] 用法理解:用于删除有明确定义的数据或者整个表的 ...

  2. 零基础自学SQL课程 | DELETE 删除语句

    大家好,我是宁一. 今天是SQL课程的第十课. 讲讲DELETE 删除语句,用来删除表中的一条或多条记录. 基本语法: DELETE FROM <表名> WHERE <筛选条件> ...

  3. DROP TABLE, TRUNCATE TABLE, DELETE TABLE 三种删除语句的区别

    1.DROP TABLE 清除数据并且销毁表,是一种数据库定义语言(DDL Data Definition Language), 执行后不能撤销,被删除表格的关系,索引,权限等等都会被永久删除. 2. ...

  4. Python的三种删除语句

    从列表中删除元素 你经常需要从列表中删除一个或多个元素.例如,玩家将空中的一个外星人射杀后,你很可能要将其从存活的外星人列表中删除;当用户在你创建的 Web 应用中注销其账户时, 你需要将该用户从活跃 ...

  5. PL/SQL两种case语句写法

    --case表达式中的简单caseDECLARE v_num NUMBER :=# v_result VARCHAR2(30); BEGIN v_result := MOD(v_num,2); dbm ...

  6. MYSQL中的删除语句

    1. 背景介绍 MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理. "SQL" ----是用于访 ...

  7. oracle删除语句

    1.删除用户语句:(当我们想要删除当前用户下的所有表,直接删除用户再重建一个用户) //保证有删除用户的权限 drop user user_name cascade; 2.授权 grant conne ...

  8. oracle删除唯一索引sql语句_高级SQL之在选择语句中使用更新和删除

    点击蓝字关注我吧 [本文详细介绍了数据库中在选择语句中使用更新和删除的方法,欢迎读者朋友们阅读.转发和收藏!] 1 基本概念 1.1 SQL UPDATE 语句 Update 语句 Update 语句 ...

  9. sql语句截断_SQL Server中SQL截断和SQL删除语句之间的区别

    sql语句截断 We get the requirement to remove the data from the relational SQL table. We can use both SQL ...

最新文章

  1. 2021年大数据ZooKeeper(一):ZooKeeper基本知识
  2. Python数据框结合lambda函数的使用
  3. 基于Pytorch再次解读LeNet-5现代卷积神经网络
  4. Android中调用另一个Activity并返回结果-以模拟选择头像功能为例
  5. Ubuntu 配置 spark
  6. SAP Business Application Studio和Authentication Trust Management
  7. Java命令行界面(第21部分):航空公司2
  8. C++插入中文到mysql乱码
  9. 第五十一期:互联网不如国企,去BAT的程序员都是diao丝?
  10. 如何处理db2中文不显示
  11. equals和== 的用法
  12. 编译原理pl/0 c语言版 pl0.h文件
  13. python高端写法_python高级篇:使用元类方式实现单例模式详解
  14. script标签的加载解析执行
  15. 752. [BJOI2006] 狼抓兔子
  16. mt2503短信數量和定義的不一致
  17. RMII RGMII MII GMII个人总结
  18. 关于国内LTE宽带集群通信知识现状介绍
  19. tdr 定位公式_时域反射计TDR原理详细解析
  20. 学习C#的一点一滴(20)

热门文章

  1. SAP CRM Contact和Account的从属关系
  2. 字节是微型计算机中存储容量的度量单位,微型计算机内存容量的基本计量单位...
  3. php dvld.active 1,PHP的字符串
  4. python两个类共用一个变量_python – 如何从一个类到另一个类访问变量?
  5. python集合运算_Python 集合set()添加删除、交集、并集、集合操作详解
  6. 超微服务器硬盘红灯_硬盘亮红灯服务器崩溃的解决方法
  7. unity ui插件_用Unity制作GalGame/视觉小说游戏的模型素材与插件推荐
  8. iview 级联选择组件_vue组件递归渲染实例
  9. java多线程编程核心技术 pdf_Java多线程编程核心技术之volatile关键字
  10. python中库是什么意思_python的库是什么意思