TRUNCATE和DELETE之间的区别?

Pra*_*rve 5 sql oracle

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

小智 9

删除

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

截短

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


Raz*_*aza 5

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

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