`

oracle:delete、truncate、drop删除表语句比较

    博客分类:
  • sql
 
阅读更多

转自:http://www.examw.com/Oracle/jishu/104237/
  DELETE (删除数据表里记录的语句)

  语法:DELETE FROM表名 WHERE 条件;

  注意:删除记录并不能释放ORACLE里被占用的数据块表空间. 它只把那些被删除的数据块标成unused.

  如果确实要删除一个大表里的全部记录, 可以用 TRUNCATE 命令, 它可以释放占用的数据块表空间

  语法:TRUNCATE TABLE 表名; //此操作不可回退.

  相同点

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

  注意:这里说的delete是指不带where子句的delete语句

  不同点:

  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,再重新导入/插入数据

  oracle中删除表中的一列语句

  alter table 表名 drop colum 列名

转自:http://blog.csdn.net/wangcheng8080/article/details/2793903
方法一:
    DELETE FORM tb_channel a WHERE a.rowid IN
                (SELECT MAX(b.rowid) FROM tb_channle b
    WHERE a.policyno=b.policyno AND a.classcode=b.classcode);
--这一办法在数据记录超过10万时一般都会变得很慢。

方法二:
--建立临时表,--清空原表,--插回原表,如下例:
    CREATE TABLE temp_emp as (SELECT DISTINCT * FROM employee) ;
    truncate table employee;
    INSERT INTO employee SELECT * FROM temp_emp;
——这一办法适用于较大的表的情况。因为是块操作,对应于大表效率会好很多。

方法三:
--建立新表,--去重复放入,--删除原表,如下例:
    SELECT DISTINCT * INTO new_table FROM old_table
    ORDER BY primary_key
    DROP TABLE old_table
    EXEC sp_rename new_table,old_table;
——这一办法适用于较大的表的情况。因为是块操作,对应于大表效率会好很多。

---------------------------------------------
truncate table 与 delete tabel的区别

一、
1.delete产生rollback,如果删除大数据量的表速度会很慢,同时会占用很多的rollback segments,truncate是DDL操作,不产生rollback,速度快一些。
  
2.不从tablespace中腾出空间,需要 ALTER TABLESPACE AAA COALESCE; 才有空间
  
3.truncate调整high water mark 而delete不.truncate之后,TABLE的HWM退回到 INITIAL和NEXT的位置(默认),delete 则不可以。
  
4.truncate 只能对table,delete 可以是table,view,synonym
  
5.TRUNCATE TABLE 的对象必须是本模式下的,或者有drop any table的权限 而DELETE 则是对象必须是本模式下的,或被授予 DELETE ON SCHEMA.TABLE 或DELETE ANY TABLE的权限

二、
truncate是DDL語言.
delete是DML語言

DDL語言是自動提交的.命令完成就不可回滾.
truncate的速度也比delete要快得多. 所以,delete 后要commit work,而truncate就不需要啦。

三、
truncate 会把 highwatermark 回归至 0 ... 当下一次再插入新资料时就会快一些啦。
所以一般都是在 temp table 上使用的,不过要注意就是 truncate 不能在 pl/sql 上使用,要用 dynamic SQL 才可以。

四、
当你不再需要该表时, 用 drop;
当你仍要保留该表,但要删除所有记录时, 用truncate;
当你要删除部分记录时(always with a WHERE clause), 用 delete.

五、
TRUNCATE TABLE Index也會刪掉不是指drop index

分享到:
评论

相关推荐

    delete,truncate和drop的区别

    尽管`drop`、`truncate`和`delete`都是DDL或DML操作,但在Oracle中,仍有可能恢复已删除的数据或表: - **drop操作**:如果Oracle的回收站功能被启用,则可以通过回收站恢复已删除的表。需要注意的是,这取决于表...

    truncate,delete以及drop区别汇总

    - **相同点**:`truncate` 和不带 `where` 子句的 `delete`,以及 `drop` 都会删除表内的数据。 - **不同点** - `truncate` 和 `delete` 只删除数据不删除表结构;`drop` 会删除表结构及相关对象。 - `delete` ...

    sql之truncate_、delete与drop区别.pdf

    `TRUNCATE`、不带`WHERE`子句的`DELETE`以及`DROP`这三个命令都能实现删除数据的效果。然而,它们的操作对象和后续影响有着本质的不同。 #### 不同点 ##### 1. 表结构的影响 - **TRUNCATE** 和 **DELETE** 只删除...

    truncate,delete,drop的异同点

    ### Truncate, Delete, Drop 的异同点 在数据库管理中,`TRUNCATE`, `DELETE`, 和 `DROP` 是三种常见的数据操作语言(DML)与数据定义语言(DDL)。这三种命令都有助于管理和调整数据库表结构及其中的数据,但它们...

    数据库中truncate,delete,drop语句的比较

    ### 数据库中truncate、delete与drop语句的深入解析 #### 一、基本概念与应用场景 在数据库管理中,`truncate`、`delete`与`drop`是三种常见的SQL语句,它们各自拥有不同的功能与用途,对于初学者来说,区分这三种...

    详解Truncate delete drop三者的区别

    详细阐述了Oracle中三种删除的方式truncate,drop和delete三者的区别和联系.

    oracle数据库删除数据Delete语句和Truncate语句的对比.docx

    Oracle 数据库删除数据 Delete 语句和 Truncate 语句的对比 Delete 语句和 Truncate 语句是 Oracle 数据库中两种常用的删除数据的方法,但是它们之间存在着明显的差异。 一、Delete 语句 Delete 语句是一种 DML...

    MySQL删除表操作实现(delete、truncate、drop的区别)

    本文主要讲mysql中三种删除表的操作,delete语句、truncate语句以及drop语句的区别: 简介 delete 1、删除整张表的数据: delete from table_name; 2、删除部分数据,添加where子句: delete from table_name ...

    利用 Oracle 系统触发器防止误删除表操作

    当DBA或其他用户具有足够的权限时,可能会因为输入错误等原因执行`DROP TABLE`或`TRUNCATE TABLE`命令,导致重要的数据表被意外删除或清空。例如,用户原本打算删除名为`A`的表(`DROP TABLE A CASCADE CONSTRAINTS;`...

    sql中 truncate 和 delete 有什么区别

    2. 删除方式:delete语句是一条条删除记录,而truncate语句是一次性删除整个表。 3. 日志记录:delete语句会记录每个删除的记录,而truncate语句只记录页释放的信息,因而所用的事务日志空间较少。 4. 表结构:...

    oracle数据库删除数据Delete语句和Truncate语句的对比.pdf

    在Oracle数据库管理中,删除数据是一项常见的操作,通常有两种主要的方式:Delete语句和Truncate语句。这两种语句在功能上相似,都是用来移除表中的数据,但在执行效率和资源消耗上存在显著差异。 一、Delete语句 ...

    sql之truncate、delete与drop区别

    在SQL语言中,`TRUNCATE`、`DELETE` 和 `DROP` 是三个非常重要的数据操作语句,它们各自有着不同的用途和特性。理解这些差异对于数据库管理至关重要,特别是对于数据安全性和性能优化方面。 首先,`TRUNCATE` 语句...

    Oracle_授权审计表Truncate权限.docx

    Oracle 授权审计表 Truncate 权限 Oracle 数据库中的授权审计表是指系统自动生成的审计表,用于记录数据库中各种操作的审计信息。这些审计信息可以用于跟踪数据库中发生的各种操作,提高数据库的安全性。 Truncate...

    oracle中truncate table后的数据恢复

    在Oracle数据库中,`TRUNCATE TABLE`是一个用于删除表中所有数据的命令,它与`DELETE`语句不同,不记录任何删除操作,并且在大多数情况下执行速度更快。然而,一旦执行`TRUNCATE TABLE`,数据通常无法通过常规的...

    ORACLE truncate 数据恢复

    在Oracle数据库中,`TRUNCATE TABLE`命令用于删除表中的所有数据,但它与`DELETE`语句有所不同。`TRUNCATE`操作是DDL(Data Definition Language)的一部分,而`DELETE`是DML(Data Manipulation Language)。由于`...

    delete、truncate、drop的区别以及该如何选择

    前言 上周同事小姐姐问我:“哈哥你看,我发现...咱们常用的三种删除方式:通过 delete、truncate、drop 关键字进行删除;这三种都可以用来删除数据,但场景不同。 一、从执行速度上来说 drop > truncate >> DELETE 二

    说一说drop、delete与truncate的区别

    Truncate删除表中的所有数据,这个操作不能回滚,也不会触发这个表上的触发器,TRUNCATE比delete更快,占用的空间更小; Drop命令从数据库中删除表,所有的数据行,索引和权限也会被删除,所有的DML触发器也不会被...

    浅析删除表的几种方法(delete、drop、truncate)

    您可能感兴趣的文章:数据库中删除语句Drop、Delete、Truncate的相同点和不同点的比较(实例说明)drop,truncate与delete的区别详解MySQL中DROP,TRUNCATE 和DELETE的区别实现mysql从零开始浅析drop user与delete from ...

    Oracle_审计表_sys.aud$_授权给用户Truncate权限.docx

    - **删除存储过程**:当不再需要存储过程时,可以使用`DROP`命令将其删除。 ```sql DROP PROCEDURE PROC_TRUNCATE_AUD; ``` ##### 3. 表空间管理 - **查询占用`SYSTEM`表空间前10名的对象**:为了更好地了解`...

Global site tag (gtag.js) - Google Analytics