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可能更适合你的需求。
---------------
我每一次回头,都感觉自己不够努力,所以我不再回头。
---------------