2009-10-05 87 views
45

在事務中可以使用SQL「truncate table」命令嗎?我正在創建一個應用程序,而我的表格有很多記錄。我想刪除所有記錄,但如果應用程序失敗,我將回滾事務。刪除每條記錄需要很長時間。我想知道如果我使用truncate table,我仍然可以回滾事務並在發生故障時恢復數據。我意識到截斷表不會將每個刪除寫入事務日誌,但我想知道是否將頁面釋放寫入日誌以便回滾工作。在事務中截斷表

+1

我應該澄清說我正在使用MSSQL 2005服務器。 – 2009-10-06 16:56:50

回答

44

在SQL Server中,您可以從事務回滾TRUNCATE。正如你所提到的那樣,它會將頁面重新分配寫入日誌。

+0

謝謝一噸先生。 – 2009-10-06 16:59:52

15

在Oracle中,TRUNCATE TABLE是一個不能在事務中使用的DDL語句(或者更準確地說,不能被回滾)。 AFAIK,如果在執行語句時有一個正在進行的事務,則事務被提交,然後TRUNCATE被執行並且不能撤消。

在Informix中,TRUNCATE的行爲稍有不同;您可以在事務中使用TRUNCATE,但在此之後允許的唯一語句是COMMIT和ROLLBACK。

其他DBMS可能對TRUNCATE TABLE的行爲有自己特殊的解釋。