先说oracle
早上来公司,开始一天的job。
先做一个保存点
savepoint a1;
--上午做了很多的事情,但都没有提交事务
savepoint a2;
--下午又做了很多的事情,也没有提交事务
--到了晚上,发现下午有一个地方做错了,OK,回滚到point a2;
--也就是说下午做事情都白做了(白做也比被开了强,再加班补一下呗)
rollback to a2;
--当然了,如果到晚上发现早上的东西做错了,那就回滚到a1,不过今天一天就算白做了
如果做了truncate操作,那就意味着提交了事务,相当于执行了
commit;
之前做的所有的保存点都没有了,也无法回滚事务了。
再说说sql server。我用的是sql server 2005,与oracle的关键字不一样,它用的是tran和save tran,保存一个我做的instance:
select * from dbo.tempTable
begin tran A; --早上过来上班,启动一个事务
save tran B; --做一个保存点
--执行一些操作
update dbo.tempTable set illegalAccess=10;
select * from dbo.tempTable;
save tran C; --再做一个保存点,
--再执行一些操作
update dbo. tempTable set pattern='ABCD';
select * from dbo.tempTable;
rollback tran B; --发现改错了一些东西,回滚事务
select * from dbo.tempTable;
commit tran A; --一天的事务做完了,检查一下,如果没有错误就提交。