在事务中截断表

可以在事务中使用SQL“truncate table”命令吗? 我正在创build一个应用程序,我的桌子上有很多logging。 我想删除所有的logging,但如果应用程序失败,我是回滚我的交易。 删除每个logging需要很长时间。 我想知道如果我使用截断表,我仍然可以回滚事务,并在发生故障时恢复数据。 我意识到截断表不写入每个删除到事务日志,但我想知道是否它写页面释放到日志,以便回滚工作。

在SQL Server中,您可以从事务中回滚TRUNCATE。 正如你所提到的那样,它将页面重新分配写入日志。

在Oracle中,TRUNCATE TABLE是一个不能在事务中使用的DDL语句(或者更准确地说,不能被回滚)。 AFAIK,如果在执行语句时有一个正在进行的事务,则事务被提交,然后TRUNCATE被执行,不能被撤销。

在Informix中,TRUNCATE的行为稍有不同; 你可以在一个事务中使用TRUNCATE,但是之后允许的唯一的语句是COMMIT和ROLLBACK。

其他DBMS可能对TRUNCATE TABLE的行为有自己特殊的解释。