当第一条SQL语句被执行的时候,事务就开始了。
当出现下面的事件的时候,事务变结束:
1 commit 或 rollback
被执行时
2 DDL 或 DCL 被执行时(自动提交)
3 用户退出
4 系统终止
1.
我在表test1中添加一条记录
SQL> select * from
test1;
ID
NAME
---------- --------------------
1 星星
2
xingxing
4 田月超
5 田月星
6
yuechaotian
2 李连杰
已选择6行。
2.
我没有提交表,Oracle事务并没有结束,这条记录其实并没有被真正提交,
我另外打开一个sqlplus窗口进行查询
连接到:
Oracle Database
10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning,
OLAP and Data Mining options
SQL> select * from
test1;
ID
NAME
---------- --------------------
2 xingxing
4
田月超
5 田月星
6 yuechaotian
2 李连杰
发现记录并没有提交。
现在我commit表
SQL>
commit;
提交完成。
表已经被提交,事务结束。
3. 我再添加一条记录,然后回滚rollback
SQL> insert into
test1 values(3,'yuexingtian');
已创建 1 行。
SQL> select * from
test1;
ID
NAME
---------- --------------------
1 星星
2
xingxing
3 yuexingtian
4 田月超
5
田月星
6 yuechaotian
2 李连杰
已选择7行。
然后执行回滚rollback
SQL>
rollback;
回退已完成。
SQL> select * from
test1;
ID
NAME
---------- --------------------
1 星星
2
xingxing
4 田月超
5 田月星
6
yuechaotian
2 李连杰
已选择6行。
此时表已经提交,事务也结束了。
4. 事务保存点(savepoint)
保存点(SAVEPOINT)是事务处理过程中的一个标志,与回滚命令(ROLLBACK)结合使用,主要的用途是允许用户将某一段处理回滚而不必回滚整个事务,这在PL/SQL开发中还是很有用处的。
SQL> update test1 set
name='张学友' where id =1;
已更新 1 行。
SQL> savepoint
update_id 设置保存点
2 ;
保存点已创建。
SQL> select * from
test1;
ID
NAME
---------- --------------------
1 张学友
2
xingxing
4 田月超
5 田月星
6
yuechaotian
2 李连杰
已选择6行。
SQL> insert into
test1 values(3,'小屁孩');
已创建 1 行。
SQL> select * from
test1;
ID
NAME
---------- --------------------
1 张学友
2
xingxing
3 小屁孩
4 田月超
5 田月星
6
yuechaotian
2 李连杰
已选择7行。
SQL> rollback to
update_id
2 ;
回退已完成。
SQL> select * from
test1;
ID
NAME
---------- --------------------
1 张学友
2
xingxing
4 田月超
5 田月星
6
yuechaotian
2 李连杰
已选择6行。
此时已经回滚到我设置savepoint的地方(update_id)了。
Author:yuexingtian
Date:2009-5-15 星期五
2009-05-15
yuexingtian
阅读(1433) | 评论(0) | 转发(0) |