【问题标题】:Truncate Table Within Transaction在事务中截断表
【发布时间】:2010-12-04 02:55:56
【问题描述】:

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

【问题讨论】:

  • 我应该澄清一下我使用的是 MSSQL 2005 服务器。
  • This 列出了所有不能在 SQL Server 事务中使用的命令。 TRUNCATE 没有列出,所以是允许的。

标签: sql sql-server sql-server-2005 transactions truncate


【解决方案1】:

在 SQL Server 中,您可以从事务中回滚 TRUNCATE。正如您所提到的,它确实将页面释放写入日志。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • Oracle 21c 仍然如此
    猜你喜欢
    • 2011-08-23
    • 1970-01-01
    • 2012-06-10
    • 1970-01-01
    • 2016-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多