我剛剛發現"truncate {table}"
語句沒有被大多數數據庫觸發器捕獲。 我在"delete from {table}"
的基礎上將風險置換爲風險嗎?我應該更喜歡「截斷」還是「刪除」來刪除表格的內容?
我對MSSQL和Sybase特別感興趣。
我剛剛發現"truncate {table}"
語句沒有被大多數數據庫觸發器捕獲。 我在"delete from {table}"
的基礎上將風險置換爲風險嗎?我應該更喜歡「截斷」還是「刪除」來刪除表格的內容?
我對MSSQL和Sybase特別感興趣。
刪除將是很多資源越來越慢,因爲創建正確的事務日誌資源較重。但是,你可以使它成爲一個更大的交易的一部分,並且,正如你所說,觸發器和約束也將被激活。
TRUNCATE被認爲是DDL操作,就像DROP TABLE一樣。它非常快速,但不能作爲事務的一部分來完成(即不能回滾)。
你需要哪一個取決於你的要求。你有觸發器需要運行嗎?如果是這樣,你可以在TRUNCATE之後或之前做點什麼來補償它們沒有運行?
截斷可以在SQL服務器中回滾,但不在Sybase中回滾。如果你有其他表的FK引用,那麼你不能使用trauncate table。
如果觸發邏輯像say那樣審計數據或基於此刪除從其他表中刪除數據。你應該堅持刪除,但如果你沒有任何觸發器,那麼最好的辦法就是截斷表。
本頁聲明在較新版本的Sybase中,可以回滾'TRUNCATE':[Delete和Truncate命令之間的區別是什麼?](http://sybase-ase.blogspot.gr/2011/07/what- is-difference-between-delete-and.html) –
閱讀sybase手冊並在tran數據庫選項中查找ddl。您甚至不能將truncate table命令作爲事務的一部分,因此回滾根本不可能。請閱讀供應商的手冊,他們提供了一個很好的信息.http://infocenter.sybase.com/help/index.jsp –
在sybase中它被認爲是DDL。只需在sybase中搜索數據庫中的ddl選項,就可以得到你的答案。 –
[截斷可以在SQL Server中至少回滾](http://dba.stackexchange.com/a/7677/3690)。不確定Sybase。 –
@MartinSmith:+1。似乎我的基於Oracle的知識不適用於此...一旦另一個被接受,將刪除此答案。 – Thilo
@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」*** –