截断交易中的表格

Dav*_*der 56 sql sql-server transactions truncate sql-server-2005

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

wom*_*omp 54

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


Jon*_*ler 16

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

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

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

  • 对于 Oracle 21c 仍然如此 (2认同)