TRUNCATE 和 DELETE的区别

TRUNCATE 和 DELETE的区别

  • 条件删除
  • 事务回滚
  • 清理效率
  • 触发器
  • 增长列
  • 高水位重置

条件删除

DELETE是可以带WHERE的,所以支持条件删除;而TRUNCATE只能删除整个表。

事务回滚

由于DELETE是数据操作语言(DML - Data Manipulation Language),操作时原数据会被放到 rollback segment中,可以被回滚;而TRUNCATE是数据定义语言(DDL - Data Definition Language),操作时不会进行存储,不能进行回滚。

清理效率

delete效率低于truncate,delete是一行一行地删除,truncate会重建表结构。

触发器

truncate 不能触发任何Delete触发器;而delete可以触发delete触发器。

增长列

如果删除带自增长列的表,delete删除后,重新插入数据,记录从断点处开始,truncate删除后,重新插入数据,记录从1开始。

高水位重置

随着不断地进行表记录的DML操作,会不断提高表的高水位线(HWM),DELETE操作之后虽然表的数据删除了,但是并没有降低表的高水位,随着DML操作数据库容量也只会上升,不会下降。所以如果使用DELETE,就算将表中的数据减少了很多,在查询时还是很和DELETE操作前速度一样。
而TRUNCATE操作会重置高水位线,数据库容量也会被重置,之后再进行DML操作速度也会有提升。

详细参考:https://www.cnblogs.com/vegetableDD/p/11726513.html

你可能感兴趣的:(数据库,数据库)