• Oracle中的delete和truncate的关系


    转自:http://chenxy.blog.51cto.com/729966/168459

    1、相同点
            a.都可以删除数据,其中truncate用于全表清空数据,而delete可以选择的删除
    2、不同点:
            a.回滚,delete支持事物回滚,而truncate不支持。
               延伸:在oracle中事物能回滚,是因为oracle中设计的undo表空间。数据再删除后仍能回滚是因为把数据放到了undo表空间
                delte属于DML语言,DML语言需要手动提交事物,可以进行事务回滚
              truncate属于DDL语言,DDL语言属于隐式提交事务,因此不能进行回滚
           b.高水线
                  oracle中的表用来容纳数据的上限。high water mark(可形象理解为水库的历史最高水位),一般情况,每次增长为5个数据块。
                  delete操作执行时,不影响数据所占用的数据块,高水线保持不变
                     truncate操作执行时,会释放数据占用空间。高水线位置下降。也可以通过reuse store 来进行复位
                  可以通过数据库自带的block命令观察效果,oracle分配区时默认一次是7+1个,增长是5个.其中一些sql优化是针对数据占用空间来进行的,
               因为在查询数据时,即使该表没有数据,但只要占用了数据空间都会进行全表扫描。
          c.空间占用
                  delete不会释放,而truncate则回收了数据空间
          d.效率
                 可以通过删除数据所用时间来比较,结论:truncate>delete,(因为delte把数据放到了undo表空间)
       
  • 相关阅读:
    统计一段文字中出现频率最高的10个单词(c语言)
    java之过滤器Filter (应用场景)
    java之过滤器Filter
    Spring AOP
    清华大学iCenter区块链公开课 第二节
    学习区块链 第一节 精通比特币
    使用Shiro登录成功后,跳转到之前访问的页面实现
    windows下系统移植到linux下出现的问题
    mysql分页查询
    安卓开发随笔
  • 原文地址:https://www.cnblogs.com/lovebaoqiang/p/4289331.html
Copyright © 2020-2023  润新知