假设您有一个“删除时”触发器
1 当你触发删除时会发生什么?
触发器将被触发,触发器主体将被执行
- 当你触发截断时会发生什么?
我的猜测 - 因为 truncate(DDL) 和 delete(DML) 是完全不同的命令,所以什么都不会发生
正如@Eggi 所说,您在问题中的断言是正确的。
除了他的答案和他的链接中给出的详细信息之外,TRUNCATE
将重置您表中的高水位标记,而DELETE
不会。
如果您的表格大小发生很大变化,那么这可能非常相关。
来自 AskTom:
HWM 是相关的,因为 Oracle 将在完全扫描期间扫描 HWM 下的所有块,即使它们不包含数据。这将影响完整扫描的性能,尤其是在 HWM 下的大多数块为空的情况下。要看到这一点,只需创建一个包含 1,000,000 行的表(或创建任何包含大量行的表),然后从该表中执行 SELECT COUNT( )。现在,删除其中的每一行,您会发现 SELECT COUNT() 与计算 1,000,000 行一样长(或更长,如果您需要清理块!请参阅第 9 章的“块清理”部分)计算 0 行。这是因为 Oracle 正忙于读取 HWM 下的所有块以查看它们是否包含数据。您应该将此与在表上使用 TRUNCATE 而不是删除每一行时发生的情况进行比较。TRUNCATE 会将表的 HWM 重置回“零”,并将截断表上的关联索引。如果您计划删除表中的每一行,则 TRUNCATE(如果可以使用)将是出于此原因选择的方法。
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:492636200346818072
希望能帮助到你...
更多信息:http ://www.orafaq.com/faq/difference_between_truncate_delete_and_drop_commands