Oracle中DDL语句对事务的影响

本文详细对比了Oracle和SQL Server在执行DDL语句时对事务的不同影响,通过具体例子展示了在不同数据库管理系统中DDL语句如何在事务中执行,以及其可能产生的结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



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操作,则会把三个操作的结果全部提交。

参考:http://www.233.com/oracle/zonghe/20101008/103744390.html
http://blog.youkuaiyun.com/fw0124/article/details/6227376

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值