删除 DELETE是一种DML命令。 使用行锁执行DELETE语句,表中的每一行都会被锁定以便删除。 我们可以在WHERE子句中指定筛选条件。 如果有WHERE条件存在,则删除指定的数据。 因为操作被单独记录,所以DELETE会激活触发器。 比TRUNCATE慢,因为它会保留日志。 可以回滚。 截断 TRUNCATE是一种DDL命令。 TRUNCATE TABLE总是锁定整个表和页,但不锁定每一行。 不能使用WHERE条件。 将删除所有数据。 TRUNCATE TABLE无法激活触发器,因为该操作不记录单独的行删除。 在性能方面更快,因为它不会保留任何日志。 不能回滚。
当我们使用Truncate时,我们正在释放分配给数据的整个空间,而不将其保存到undo表空间中。但是,在删除时,我们会将所有数据放入undo表空间,然后再删除所有数据。 把TRUNCATE放在Oracle的DDL阵营中的主要原因是: TRUNCATE可以更改存储参数(NEXT参数),这些参数是对象定义的一部分 - 这是DDL阵营的一部分。 TRUNCATE进行隐式提交,无法回滚(闪回除外) - Oracle中的大多数(全部?)DDL操作都会执行此操作,而DML不会。
truncate
可以激活触发器:一个“截断触发器”。 - user330315