我应该更喜欢“截断”还是“删除”以删除表的内容?

时间:2012-06-28 11:42:32

标签: database

我刚刚发现大多数数据库触发器都没有捕获"truncate {table}"语句。 我是否通过"delete from {table}"替换此类陈述来承担任何表现风险?

我对MSSQL和Sybase特别感兴趣。

2 个答案:

答案 0 :(得分:3)

在创建正确的事务日志时,DELETE将很多更慢更重的资源。但是你可以把它作为一个更大的交易的一部分,正如你所说,触发器和约束也将被激活。

TRUNCATE被认为是DDL操作,就像DROP TABLE一样。它非常快,但不能作为事务的一部分完成(即你不能回滚)。

您需要哪一个取决于您的要求。你有需要运行的触发器吗?如果是这样,你可以在TRUNCATE之前或之前做一些事情以补偿它们没有运行吗?

答案 1 :(得分:2)

Truncate可以在SQL Server中回滚,但在Sybase中不回滚。如果你有其他表的FK引用到这个表,那么你不能使用trauncate表。

如果您在触发器中有逻辑,例如审核数据或根据此删除从其他表中删除数据。您应该坚持删除,但如果您没有任何类型的触发器,那么最好的方法是截断表。