gpt4 book ai didi

sql - 如果不允许回滚 TRUNCATE 语句,那么如何在事务中使用它?

转载 作者:行者123 更新时间:2023-12-04 14:29:17 26 4
gpt4 key购买 nike

这个问题在这里已经有了答案:




9年前关闭。




Possible Duplicate:
Truncate Table Within Transaction



如果不允许回滚 TRUNCATE 语句,那么它如何在事务中回滚?考虑以下代码:
USE tempdb
GO
-- Create Test Table
CREATE TABLE TruncateTest (ID INT)
INSERT INTO TruncateTest (ID)
SELECT 1
UNION ALL
SELECT 2
UNION ALL
SELECT 3
GO
-- Check the data before truncate
SELECT * FROM TruncateTest
GO
-- Begin Transaction
BEGIN TRAN
-- Truncate Table
TRUNCATE TABLE TruncateTest
GO
-- Check the data after truncate
SELECT * FROM TruncateTest
GO
-- Rollback Transaction
ROLLBACK TRAN
GO
-- Check the data after Rollback
SELECT * FROM TruncateTest
GO
-- Clean up
DROP TABLE TruncateTest
GO

最佳答案

一个相当普遍的 SQL Server 信念是 Truncate Cannot Be Rolled Back Because It Is Not Logged .但是,您问题中的代码只是验证这实际上是一个神话。
TRUNCATE确实需要比 DELETE 少得多的日志记录因为它只将页面释放和一些元数据更新记录到系统表中,而不是将已删除行的全部内容记录到日志中 (See a detailed breakdown of logging here)。

SQL Server continues to lock事务提交之前释放的页面阻止它们重新分配 ROLLBACKTRUNCATE只需要反转这些记录在日志中的页面释放和系统表更新。

关于sql - 如果不允许回滚 TRUNCATE 语句,那么如何在事务中使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8542973/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com