可以在事务中使用 SQL“截断表”命令吗?我正在创建一个应用程序,我的表有大量记录。我想删除所有记录,但如果应用程序失败,我将回滚我的事务。删除每条记录需要很长时间。我想知道如果我使用截断表,我是否仍然可以回滚事务并在发生故障时取回我的数据。我意识到截断表不会将每个删除写入事务日志,但我想知道它是否将页面释放写入日志以便回滚工作。
问问题
27043 次
2 回答
69
在 SQL Server 中,您可以从事务中回滚 TRUNCATE。正如您所提到的,它确实将页面释放写入日志。
于 2009-10-05T23:44:28.090 回答
22
在 Oracle 中,TRUNCATE TABLE 是不能在事务中使用的 DDL 语句(或者更准确地说,不能回滚)。AFAIK,如果在执行语句时有正在进行的事务,则提交事务,然后执行 TRUNCATE 并且无法撤消。
在 Informix 中,TRUNCATE 的行为略有不同;您可以在事务中使用 TRUNCATE,但之后唯一允许的语句是 COMMIT 和 ROLLBACK。
其他 DBMS 可能对 TRUNCATE TABLE 的行为有自己独特的解释。
于 2009-10-05T23:49:57.250 回答