设为首页 加入收藏

TOP

Oracle并发控制、事务管理学习笔记(五)
2014-11-24 02:40:13 来源: 作者: 【 】 浏览:4
Tags:Oracle 并发 控制 事务管理 学习 笔记
录被更新而等待。

  四.DDL语句对事务的影响

  1.Oracle中DDL语句对事务的影响

  在Oracle中,执行DDL语句(如Create Table、Create View等)时,会在执行之前自动发出一个Commit命令,并在随后发出一个Commit或者Rollback命令,也就是说,DDL会象如下伪码一样执行:

  Commit;DDL_Statement;

  If (Error) then

  Rollback;

  Else

  Commit;End if;

  我们通过分析下面例子来看Oracle中,DDL语句对事务的影响:

  Insert into some_table values(‘Before’);Creaate table T(x int);

  Insert into some_table values(‘After’);Rollback;

  由于在Oracle执行Create table语句之前进行了提交,而在Create table执行后也会自动发出Commit命令,所以只有插入After的行被回滚,而插入Before的行不会被回滚,Create table命令的结果也不会被回滚,即使Create table语句失败,所进行的Before插入也会被提交。如果最后发出Commit命令,因为插入Before及Create table的操作结果已经在之前提交,所以Commit命令影响的只有插入After的操作。

  2.SQL Server中DDL语句对事务的影响

  在SQL Server中,DDL语句对事务的影响与其他DML语句相同,也就是说,在DML语句发出之前或之后,都不会自动发出Commit命令。

  在SQL Server 2000中,对于与上面Oracle同样的例子,最后发出Rollback后,数据库会回滚到插入Before之前的状态,即插入Before和After的行都会被回滚,数据表T也不会被创建。

  如果最后发出Commit操作,则会把三个操作的结果全部提交。

  五.用户断开数据库连接对事务的影响

  另外,对应于Oracle的管理客户端工具SQL*Plus,在SQL Server 2000中是osql,两种管理工具都是命令行工具,使用方式及作用也类似,但是在SQL*Plus中,用户退出连接时,会自动先发出Commit命令, 然后再退出,而在osql中,如果用户退出连接,会自动发出Rollback命令,这对于SQL Server的自动提交模式没有什么影响,但如果处于隐式事务模式,其影响是显而易见的。对于两种数据库产品的其他客户端管理工具也有类似的不同之处

作者:NowOrNever

首页 上一页 2 3 4 5 下一页 尾页 5/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Oracle事务隔离级别 下一篇Oracle事务处理简析

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: