TRUNCATE和DELETE之间的区别?

时间:2014-08-14 05:44:39

标签: sql oracle

TRUNCATEDELETE命令执行相同的工作,在操作数据的情况下,为什么DELETE命令在DML命令下并且TRUNCATE命令来在DDL命令下?

3 个答案:

答案 0 :(得分:9)

删除

  1. DELETE是DML命令。
  2. 使用行锁执行DELETE语句,表中的每一行都被锁定以进行删除。
  3. 我们可以在where子句
  4. 中指定过滤器
  5. 如果存在条件,则删除指定的数据。
  6. 删除会激活触发器,因为操作是单独记录的。
  7. 比截断慢,因为它保留了日志。
  8. 可以回滚。
  9. TRUNCATE

    1. TRUNCATE是一个DDL命令。
    2. TRUNCATE TABLE总是锁定表和页面,但不是每行。
    3. 不能使用Where条件。
    4. 删除所有数据。
    5. TRUNCATE TABLE无法激活触发器,因为该操作不会记录单个行删除。
    6. 性能方面更快,因为它不会保留任何日志。
    7. 无法回滚。

答案 1 :(得分:5)

当我们使用Truncate时,我们将解除分配数据分配的整个空间而不保存到undo-table-space。但是,如果是Delete,我们将所有数据放入undo表空间,然后我们将删除所有数据。 将TRUNCATE放在Oracle的DDL阵营中的要点是:

  1. TRUNCATE可以更改存储参数(NEXT参数),它们是对象定义的一部分 - 就在DDL阵营中。
  2. TRUNCATE执行隐式提交,无法回滚(闪回一边) - Oracle中的大多数(所有?)DDL操作都执行此操作,没有DML执行

答案 2 :(得分:2)

基本上你知道DML和DDL概念,上面的区别只是记住,但关键区别在于     截断只是在不影响表结构和键约束的情况下制作数据     另一方面     如果我们不指定where条件,删除也会影响表结构。