我刚刚发现大多数数据库触发器都没有捕获"truncate {table}"
语句。
我是否通过"delete from {table}"
替换此类陈述来承担任何表现风险?
我对MSSQL和Sybase特别感兴趣。
答案 0 :(得分:3)
在创建正确的事务日志时,DELETE将很多更慢更重的资源。但是你可以把它作为一个更大的交易的一部分,正如你所说,触发器和约束也将被激活。
TRUNCATE被认为是DDL操作,就像DROP TABLE一样。它非常快,但不能作为事务的一部分完成(即你不能回滚)。
您需要哪一个取决于您的要求。你有需要运行的触发器吗?如果是这样,你可以在TRUNCATE之前或之前做一些事情以补偿它们没有运行吗?
答案 1 :(得分:2)
Truncate可以在SQL Server中回滚,但在Sybase中不回滚。如果你有其他表的FK引用到这个表,那么你不能使用trauncate表。
如果您在触发器中有逻辑,例如审核数据或根据此删除从其他表中删除数据。您应该坚持删除,但如果您没有任何类型的触发器,那么最好的方法是截断表。