2012-06-28 58 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選項,就可以得到你的答案。 –

相關問題