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表空间)

时间: 2024-11-08 22:42:54

Oracle中的delete和truncate的关系的相关文章

Oracle中Drop,Delete,Truancate表恢复

Oracle中Drop,delete,truancate表恢复 oracle中,常常会由于一些失误导致表的删除,以下是我写的一些表恢复的方法. 闪回模式得满足条件(启用闪回区和启用归档): 1.检查是否启动了flash recovery area show parameter db_recovery_file 2.检查是否启用了归档 archive log list; (一)Drop表的恢复 如果按照平时删除表的方法:(Drop table tablename;)的话.表不会立即被删除,而是存放

oracle中实现某个用户truncate 其它用户下的表

oracle文档中对truncate权限的要求是需要某表在当前登录的用户下,或者当前登录的用户有drop any table的权限. 但是如果不满足第一个条件的情况下,要让某用户满足第二个条件就导致权限过大了. 参考网上的讨论,可以使用存储过程来时间. 例如有两个用户 u1,u2,u1下有表 test1a 现在想要实现u2能 truncate u1下的表 test1a. 可以使用用户u1创建存储过程, create procedure u1.stgtruncate(table_name in v

oracle中delete drop truncate的用法和区别

数据库的运维中,经常会遇到delete drop truncate的操作,那么如何去把握它们的用法和区别呢? 比如当数据库空间爆满,已经增长到存储空间单个存储文件的最大值32G.你需要通过一些办法释放掉表空间或者扩容表空间来解决问题. 一般当系统中大量使用分区表,而针对分区表清除数据,是不会释放表空间的,必须把分区drop掉,才会释放空间. 下面我们具体了解一下这三个命令: 一.delete 1.delete是DML,执行delete操作时,每次从表中删除一行,并且同时将该行的的删除操作记录在r

oracle中delete、truncate、drop的区别

oracle中delete.truncate.drop的区别 标签: deleteoracletable存储 2012-05-23 15:12 7674人阅读 评论(0) 收藏 举报  分类: oracle(2)  版权声明:本文为博主原创文章,未经博主允许不得转载. 一.delete 1.delete是DML,执行delete操作时,每次从表中删除一行,并且同时将该行的的删除操作记录在redo和undo表空间中以便进行回滚(rollback)和重做操作,但要注意表空间要足够大,需要手动提交(c

详解Oracle中 DELETE、TRUNCATE 和 DROP 的区别

前言 以前做项目的时候,很少关注知识点中比较细节的东西,正好今天有这个机会,就把 Oracle 中几个常用的函数区分一下. 语法 delete from table_name truncate table table_name drop table table_name 区别 delete from后面可以写条件,truncate不可以,drop后边一般也不写条件. delete from记录是一条条删的,所删除的每行记录都会进日志,而truncate一次性删掉整个页,因此日志里面只记录页释放,

oracle中drop、delete和truncate的区别

oracle中可以使用drop.delete和truncate三个命令来删除数据库中的表, 1. delete和truncate都是删除表中的内容而不能删除表的结构,而drop则是删除表的结构和内容(表将不复存在): 2. delete可以删除整个表的数据也可以有选择性地删除某一条或多条数据,而truncate则是一次性删除整个表的数据: 3. 使用delete删除的表数据并没有真正被删掉,数据占用的表空间还存在,相当于Windows中将数据删除到回收站中,日后有需要还可以恢复: 4. 使用tr

oracle 中删除表 drop delete truncate

oracle 中删除表 drop delete truncate 相同点,使用drop delete truncate 都会删除表中的内容 drop table 表名 delete from 表名(后面不跟where语句,则也删除表中所有的数据) truncate table 表名 区别 首先delete 属于DML,当不commit时时不生效的 而truncate 和 drop 则是直接生效的,不能回滚. truncate 和 delete 不删除表的结构,只是针对表中的内容删除 drop语句

Oracle中的Truncate和Delete语句

Oracle中的Truncate和Delete语句 首先讲一下,truncate命令: 语法:TRUNCATE  TABLE  table; 表格里的数据被清空,存储空间被释放. 运行后会自动提交,包括之前其它未提交的会话,因而一旦清空无法回退. 只有表格的创建者或者其他拥有删除任意表格权限的用户(如DBA)才能清空表格. TRUNCATE  TABLE  dept30; Table truncated. ---------------------------------------------

oracle中的truncate用法

oracle中的truncate 语法:TRUNCATE  TABLE  table; 在使用truncate语句(DDL语言)可以删除表中的所有记录.使用truncate语句删除数据时,通常要比使用delete语句快得多,这是因为使用truncate语句删除数据时,不会产生任何回退信息,因此执行truncate语句操作也不能回退,且使用的系统和事务日志资源少. DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项.TRUNCATE TABLE 通过释放存储表数据所用的数据页来删