TRUNCATE和DELETE的区别

当涉及到删除表中的数据时,TRUNCATE和DELETE有几个关键区别:

  • 用法
delete from table_name;
truncate table_name;
  • 执行速度:
    TRUNCATE通常比DELETE更快,因为TRUNCATE是直接删除整个表的数据,而DELETE是逐行删除数据。
    TRUNCATE是DDL语句,DELETE是DML语句。

  • 自动增长列:
    TRUNCATE重置自动增长列的计数器,将其重新设置为起始值。
    DELETE不会影响自动增长列的计数器。

  • 事务和日志:
    TRUNCATE操作不会作为事务记录,也不会被记录在日志中。
    DELETE操作会被记录在事务日志中,也可以回滚。

  • 锁定:
    TRUNCATE表会立即获取一个表级别的排他锁,因此在执行期间,其他会话无法对该表进行读或写。
    DELETE会一次性地锁定每一行数据,因此其他会话可能会在DELETE执行期间访问表中的其他行。

  • 触发器:
    TRUNCATE不会触发与表关联的触发器。
    DELETE会触发与表关联的DELETE触发器。

总的来说,如果你想快速删除表中的所有数据,并且不需要处理事务或者触发器,TRUNCATE是一个更好的选择。
但是,如果你需要更精细的控制、可回滚性或者触发器的处理,那么DELETE可能更适合你的需求。

posted @ 2024-04-24 17:30  雨中遐想  阅读(4)  评论(0编辑  收藏  举报