【发布时间】:2014-07-18 14:12:11
【问题描述】:
我的问题有点简单,但在创建此交易后我仍然怀疑。如果我执行以下代码:
BEGIN TRANSACTION
DROP TABLE Table_Name
我可以执行 ROLLBACK TRANSACTION 来恢复删除的表吗?我之所以问,是因为我不知道“对象资源管理器”中发生了什么,而且我没有发现任何关于这个主题的问题,所以我认为这可能是一个有用的问题。
【问题讨论】:
-
你为什么不试试呢?提示:是的,它会起作用,但你已经完成了 99.9% 的测试。试试看吧。
-
我认为你是对的,但我找不到这个话题的任何答案,它会对任何面临这个问题的人有所帮助。我需要删除一些表,我认为这会导致隐式提交,因为我在第一次 DROP 之后所做的 ROLLBACK 不会返回表......所以这就是我问的原因!
-
当涉及到这种类型的事情时,不要认为它可能会起作用。测试一下,看看你是否不确定。任何 DBMS 在此处的行为都相同。这是 ACID 主体的一部分。任何地方都没有隐式提交。如果你开始一个事务,没有什么会导致隐式提交。
-
好的,肖恩,非常感谢您的帮助。无论如何,我还有一个疑问......为什么我在同一个选项卡内回滚操作后无法执行 SELECT 语句?是一种奇怪的行为,因为我在说“嘿,你,把我的桌子还给我!”
-
你可以。请参阅我发布的答案中的示例。
标签: sql transactions drop-table