相同点

TRUNCATE TABLEDELETE都可以删除整个数据库表的记录

不同点

  1. DELETE
    DML语言
    可以回退
    可以有条件的删除
    DELETE FROM 表名 WHERE 条件

  2. TRUNCATE TABLE
    DDL语言
    无法回退
    默认所有的表内容都删除
    删除速度比delete快
    TRUNCATE TABLE 表名

  3. DROP TABLE
    用于删除表(表的结构、属性以及索引也会被删除);
    DROP TABLE 表名

原理

DDL(Data Definition Language)数据定义语言,DML(Data Manipulation Language)数据操作语言。

  • TRUNCATE在各种表上无论是大的还是小的都非常快。如果有ROLLBACK命令Delete将被撤销,而TRUNCATE则不会被撤销。
  • TRUNCATE是一个DDL语言,向其他所有的DDL语言一样,他将被隐式提交,不能对TRUNCATE使用ROLLBACK命令。
  • TRUNCATE将重新设置高水平线和所有的索引。在对整个表和索引进行完全浏览时,经过TRUNCATE操作后的表比Delete操作后的表要快得多。
  • TRUNCATE不能触发任何Delete触发器。
  • 当表被清空后表和表的索引讲重新设置成初始大小,而delete则不能。
  • 不能清空父表。

优化

在数据库里,使用delete删除数据以后,数据库的存储容量不会减少,而且使用delete删除某个表的数据以后,查询这张表的速度和删除之前一样,不会发生变化。
因为数据库有一个HWM高水位,它是oracle的一个表使用空间最高水位线。当插入了数据以后,高水位线就会上涨,但是如果你采用delete语句删除数据的话,数据虽然被删除了,但是高水位线却没有降低,还是你刚才删除数据以前那么高的水位。除非使用truncate删除数据。那么,这条高水位线在日常的增删操作中只会上涨,不会下跌,所以数据库容量也只会上升,不会下降。而使用select语句查询数据时,数据库会扫描高水位线以下的数据块,因为高水位线没有变化,所以扫描的时间不会减少,所以才会出现使用delete删除数据以后,查询的速度还是和delete以前一样。

转载于:https://www.cnblogs.com/lanbosm/articles/8714688.html

DROP TABLE、TRUNCATE TABLE和DELETE的区别相关推荐

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

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

  2. 【MySQL】DROP TABLE, TRUNCATE区别

    DROP TABLE, TRUNCATE TABLE, DELETE TABLE 三种删除语句的区别 1.DROP TABLE 清除数据并且销毁表,是一种数据库定义语言(DDL Data Defini ...

  3. Oracle truncate table 与 delete tabel的区别(转)

    Oracle truncate table 与 delete tabel的区别(转) 一. 1.delete产生rollback,如果删除大数据量的表速度会很慢,同时会占用很多的rollback se ...

  4. SQL中truncate table和delete的区别

    truncate table table_namedelete from table_namedrop table table_name truncate table在功能上与不带where子句的de ...

  5. drop table 和 truncate table的区别

    DROP TABLE 和 TRUNCATE TABLE 都是用来删除表的操作,但是它们的区别在于: DROP TABLE 是将整个表从数据库中删除,不可恢复. TRUNCATE TABLE 删除表中的 ...

  6. truncate table语句和delete table语句的区别

    truncate table 表名 ; delete from 表名; 都是用来删除表中所有的记录,前者删除数据后表的标识列会重新开始编号,它比delete语句使用的系统资源和事务日志资源更少,但是表 ...

  7. TRUNCATE TABLE 与 DELETE在删除整个表的所有记录时的区别

    2019独角兽企业重金招聘Python工程师标准>>> 1.DELETE・DML语言・可以回退・可以有条件的删除・不能触发任何Delete触发器・当表被清空后表和表的索引讲重新设置成 ...

  8. Mybatis的truncate table方法与SQL语句delete的区别

    假如我们现在有一张表,需要清空表里面的数据: 首先,我们可以使用SQL语句delete from+表名称来执行SQL语句来执行删除功能! 代码演示如下: Idea不推荐我们的SQL语句不加Where来 ...

  9. Mysql之drop、truncate和delete的区别

    一.delete 1.delete是DML,执行delete操作时,每次从表中删除一行,并且同时将该行的的删除操作记录在redo和undo表空间中以便进行回滚(rollback)和重做操作,但要注意表 ...

最新文章

  1. Win10家庭版如何启用本地组策略
  2. NSURLConnection和NSRunLoop
  3. 显卡安装一直循环在登录界面——解决之-T450安装显卡驱动和cuda7.5发现的一些问题...
  4. 20162303 2016-2017-2 《程序设计与数据结构》第五周学习总结
  5. canoe开发从入门到精通pdf_阿里技术官手写801页PDF《精通Java Web整合开发》
  6. boost::histogram::detail::static_if用法的测试程序
  7. 第一百五十二期:白话Entity Framework Core数据验证
  8. 对话MathWorks:解读MATLAB技术生态圈与未来趋势
  9. 【JMeter】Threads(users)3种类型
  10. 作者:黎建辉(1973-),男,中国科学院计算机网络信息中心研究员、博士生导师...
  11. 清空image画布并改变大小填充背景色
  12. Identity Mappings in Deep Residual Networks2016【论文理解】
  13. 干掉visio,这个画图神器太香了
  14. Mysql绿色版本安装
  15. OriginPro中三维图片旋转
  16. so easy(并查集)
  17. 基于WebSocket和Redis实现Bilibili弹幕效果
  18. Python批量复制一个文件夹中的全部excel数据并粘贴至一个excel文件中-openpyxl模块
  19. AI TIME PhD实验室专场,四月隆重登场!
  20. Could not delete path ‘D:\AndroidStudioProjects\LargeScreen\app\build\generated\source\r\debug\andro

热门文章

  1. js返回上一页与前进下一页
  2. Socket accept failed
  3. 浅谈:Android应用清理内存
  4. vfp 8.0中image控件的属性:RotateFlip
  5. 麦当劳员工称缺乏归属感 长期重复劳动像个机器
  6. DATAGUARD 参数配置
  7. 软件设计模式—依赖注入
  8. Android魔法(第四弹)—— 一步步实现百叶窗效果
  9. 如何使用MiniProfiler(附最新版MiniProfiler使用心得)
  10. 前端 ---JS中的面向对象