我的问题很简单,但在创建此交易后我仍然怀疑。如果我执行以下代码:
BEGIN TRANSACTION
DROP TABLE Table_Name
我可以执行恢复删除表的 ROLLBACK TRANSACTION 吗?我问是因为我不知道“对象资源管理器”中会发生什么,而且我没有发现任何关于这个主题的问题,所以我认为这可能是一个有用的问题。
我的问题很简单,但在创建此交易后我仍然怀疑。如果我执行以下代码:
BEGIN TRANSACTION
DROP TABLE Table_Name
我可以执行恢复删除表的 ROLLBACK TRANSACTION 吗?我问是因为我不知道“对象资源管理器”中会发生什么,而且我没有发现任何关于这个主题的问题,所以我认为这可能是一个有用的问题。
这非常容易测试。
create table TransactionTest
(
ID int identity primary key clustered,
SomeValue varchar(20)
)
insert TransactionTest
select 'Here is a row'
begin transaction
drop table TransactionTest
rollback transaction
select * from TransactionTest
DROP TABLE
可以回滚并且不会自动提交。
我只想补充一点,我在 Oracle 11g、Mysql 5.7 和 MSSQL 2016 中尝试过。它只在 MSSQL RDBMS 中回滚(工作)。我希望大多数其他 RDBMS 不会支持它,因为它执行模式更改。
ORACLE PL/SQL EX:
savepoint mysave;
DROP TABLE test_table;
ROLLBACK TO mysave;
select * from test_table;