Oracle中的TRUNCATE TABLE和 DELETE区别

Oracle中的TRUNCATE TABLE和DELETE命令在功能、性能、操作类型以及回滚能力等方面存在显著的区别。以下是两者之间的详细比较:

1、功能:

TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。

  • TRUNCATE TABLE:此命令用于清空表中的所有数据,但表的结构保持不变。它不会触发与表相关的触发器,也不会记录任何日志。

  • DELETE:此命令用于从表中删除满足指定条件(如果有的话)的行。它会触发与表相关的触发器,并会记录删除操作在redo和undo表空间中,以便进行回滚和重做操作。

2、性能:

  • TRUNCATE TABLE:由于它不会记录任何日志,因此执行速度非常快,特别是对于大数据量的表。同时,它会重置表的高水线和所有的索引,缺省情况下将空间释放到minextents个extent,除非使用reuse storage。

  • DELETE:由于是逐行删除,都会在事务日志中记录下来,以便在需要时进行回滚操作其执行速度相对较慢。特别是当需要删除大量数据时,性能差异会更加明显。

3、操作类型:

  • TRUNCATE TABLE:是DDL(数据定义语言)操作,会隐式提交,因此不能回滚。

  • DELETE:是DML(数据操作语言)操作,需要手动提交(commit)操作才能生效,并且可以通过rollback撤消操作。

4、回滚能力:

  • TRUNCATE TABLE:不支持回滚操作。一旦执行,表中的数据将被永久删除,除非有备份或其他恢复方法。

  • DELETE:支持回滚操作。如果在执行DELETE操作后发现问题,可以通过执行ROLLBACK命令来撤销删除操作。

5、筛选条件:

  • TRUNCATE TABLE:不支持筛选条件,它会删除表中的所有数据。删除数据行记录、释放空间、不删除定义。

  • DELETE:支持筛选条件,可以根据指定的条件删除表中的部分数据。删除数据行记录、不释放空间、不删除定义。

6、外键和索引视图:

  • 对于外键(foreign key)约束引用的表,不能使用TRUNCATE TABLE,而应使用不带where子句的DELETE语句。

  • TRUNCATE TABLE 不能对索引,视图等进行操作。

7、日志记录:

  • TRUNCATE TABLE:不会记录日志,因此执行速度很快。

  • DELETE:会记录删除操作在redo和undo表空间中,以便进行回滚和重做操作。

总结来说,TRUNCATE TABLE和DELETE在Oracle中各有其用途和优缺点。在选择使用哪个命令时,需要根据具体的需求和场景来权衡。如果需要快速清空表中的所有数据并且不关心回滚能力,那么TRUNCATE TABLE是一个很好的选择。如果需要删除满足特定条件的行并且需要保留回滚能力,那么应该使用DELETE命令。

相关推荐

  1. OracleTRUNCATE TABLE DELETE区别

    2024-06-17 13:34:04       9 阅读
  2. OracleDROP,TRUNCATE,DELETE区别

    2024-06-17 13:34:04       11 阅读
  3. MySQLdrop、truncatedelete区别

    2024-06-17 13:34:04       15 阅读
  4. C#delegateevent,及他们区别

    2024-06-17 13:34:04       10 阅读
  5. OracleNull‘‘区别

    2024-06-17 13:34:04       37 阅读
  6. OracleTimeStampDate区别

    2024-06-17 13:34:04       24 阅读
  7. DELETE、TRUNCATE DROP 在MySQL区别及使用示例

    2024-06-17 13:34:04       20 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-17 13:34:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-17 13:34:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-17 13:34:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-17 13:34:04       18 阅读

热门阅读

  1. 什么是Ant Design Vue?

    2024-06-17 13:34:04       6 阅读
  2. 力扣 50.pow(x,n)

    2024-06-17 13:34:04       9 阅读
  3. python ---- class类详解

    2024-06-17 13:34:04       6 阅读
  4. JVM

    2024-06-17 13:34:04       5 阅读
  5. 【无标题】

    2024-06-17 13:34:04       8 阅读
  6. 微信小程序vant的使用

    2024-06-17 13:34:04       8 阅读
  7. Leetcode 438. 找到字符串中所有字母异位词

    2024-06-17 13:34:04       7 阅读
  8. 【面试经典150题】【双指针】392. 判断子序列

    2024-06-17 13:34:04       11 阅读