WEB开发网
开发学院数据库Oracle Oracle数据库入门之DML与事务控制 阅读

Oracle数据库入门之DML与事务控制

 2012-11-28 15:27:20 来源:WEB开发网   
核心提示:状态:事务回滚后:数据的修改被撤销,数据恢复到修改前的状态,Oracle数据库入门之DML与事务控制(3),记录锁被释放事务提交后:数据的修改永久生效,不可撤销,将来可回退到指定的标记(保存点)处,实现事务的部分回滚举例:insert into dept values(55,'Adv','Bei
状态:事务回滚后:数据的修改被撤销。数据恢复到修改前的状态。记录锁被释放
事务提交后:数据的修改永久生效,不可撤销。数据以前的状态永久性丢失,无法恢复。保存点(savepoints)被清除
所有用户(会话)都将看到操作后的结果。记录锁被释放,其它用户此时才可以对这些数据进行修改操作
提交或回滚前:事务中DML操作结果只对当前用户(会话)可见,其它用户(会话)看不到当前事务中数据的改变,直到事务结束
事务中DML语句所涉及到的行会被锁定,其它用户(会话)不能对其进行修改操作,但可以查询
事务中数据状态的改变是可以恢复的



SqlPlus的自动提交
概述:SqlPlus中执行SQL语句时可以设置是否自动提交,缺省为非自动提交。这里的提交指的不是事务,而是SqlPlus的每条语句
将来在commit或正常关闭窗口即关闭本地到数据库连接的时候,Sql Plus中的语句也会被自动的提交
设置:show autocommit;--查看设置。其中autocommit OFF表示当前设置为非自动提交,而autocommit IMMEDIATE代表自动提交
set autocommit on;--更改为自动提交。set autocommit off;--更改为非自动提交
举例:insert into dept values(88,'Stone','Beijing');
select * from dept;
说明:自动提交状态为OFF的情况下,这是一个未提交的事务。插入新记录的操作并没有永久生效,只是当前用户(会话)可见
其它会话中看不见这个未提交事务,即使当前用户再一次连接到数据库,即建立了一个新的会话,也查询不到88号记录
比如不关闭当前SQLPlus,然后再打开一个SQLPlus窗口,并使用当前登录的scott用户再一次登录新打开的SQLPlus窗口
然后执行查询,在结果中根本没有查询到前一次会话中没有提交的操作指令,即查询结果中没有88号记录
这时可以在原SQLPlus窗口中显式的提交一下,即执行commit指令。提交完成后,插入88号记录的操作便永久生效了
然后回到后打开的SQLPlus窗口中执行查询,查询结果中很自然的就查到了88号记录
也就是说已经提交的事务影响所有其它的事务和会话。而对于未提交的事务,其它用户(会话)是看不见的



保存点(Savepoint)
概述:通过保存点在当前的事务中创建标记,将来可回退到指定的标记(保存点)处,实现事务的部分回滚
举例:insert into dept values(55,'Adv','Beijing');
insert into dept values(56,'Sec','Shanghai');
savepoint p1;
insert into dept values(57,'Acc','Dalian');
select * from dept;
rollback to p1;
select * from dept;
说明:前提是当前SqlPlus的设置是非自动提交。所以这些都是当前会话中未提交的事务
代码执行时p1之后的数据状态的改变被撤销,p1之前的操作仍然存在
若执行rollback;则回滚到整个事务的最初

上一页  1 2 3 

Tags:Oracle 数据库 入门

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接