2012-06-28 59 views

回答

3

删除将是很多资源越来越慢,因为创建正确的事务日志资源较重。但是,你可以使它成为一个更大的交易的一部分,并且,正如你所说,触发器和约束也将被激活。

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

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

+2

[截断可以在SQL Server中至少回滚](http://dba.stackexchange.com/a/7677/3690)。不确定Sybase。 –

+0

@MartinSmith:+1。似乎我的基于Oracle的知识不适用于此...一旦另一个被接受,将删除此答案。 – Thilo

+1

@MartinSmith:我想我最终在[Sybase Online:Sybase ASE 15.7](http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.dc32300)中找到了一个参考。 1570/HTML/sqlug/sqlug832.htm)。它只是说:***“不要在一个事务中使用这些命令:alter database ...(各种命令的列表)...... truncate table”*** –

2

截断可以在SQL服务器中回滚,但不在Sybase中回滚。如果你有其他表的FK引用,那么你不能使用trauncate table。

如果触发逻辑像say那样审计数据或基于此删除从其他表中删除数据。你应该坚持删除,但如果你没有任何触发器,那么最好的办法就是截断表。

+0

本页声明在较新版本的Sybase中,可以回滚'TRUNCATE':[Delete和Truncate命令之间的区别是什么?](http://sybase-ase.blogspot.gr/2011/07/what- is-difference-between-delete-and.html) –

+0

阅读sybase手册并在tran数据库选项中查找ddl。您甚至不能将truncate table命令作为事务的一部分,因此回滚根本不可能。请阅读供应商的手册,他们提供了一个很好的信息.http://infocenter.sybase.com/help/index.jsp –

+1

在sybase中它被认为是DDL。只需在sybase中搜索数据库中的ddl选项,就可以得到你的答案。 –

相关问题