保存点:使用保存点的目的是把一个大的事物分成几段进行保存
以实验的方式说明保存点的作用:
create table testsp (tid number, tname varchar2(20)); // 创建表:2 列:tid tname
insert into testsp values(1, 'Tom');
insert into testsp values(2, 'Mary'); // 插入 2 条数据
savepoint aaa; // 设置保存点 aaa
insert into testsp values(3, 'Moke'); // 插入 1 条数据
savepoint bbb; // 设置保存点 bbb
update testsp set tname='tomson' where tid=1; // 将 Tom 改为 tomson
delete from testsp where tid=1; // 删除 第一行
rollback to savepoint bbb; // 回滚至 bbb
SQL> select * from testsp; // 输出表中所有数据
我们看到第一行 Tom没有被改为 tomson,也没有被删除
rollback to savepoint aaa; // 此时不能再回退到 bbb
rollback ; //对整个事务进行回滚
select * from testsp;//输出表中的数据
结果为:
没有数据。
上述两个问题都是因为当执行 commit 或者 rollback 后保存点就会全部无效了