事务的理解

 

首先理解一个事务结束的标准是

 显示或隐式

 发出 commit 或者 rollback,在发出之后标志另外一个事务的开始。

显示的发出就是敲命令的方式 commit 或者 rollback-

隐式的方式就是比如你 insert 之后,发出了ddl语句(如create、alter等),oracle会隐式commit--下面解释你的问题

1.上面的a事务中没有在****处显式指定rollback,那么如果update出错,-----这个事务会回滚到上一次正确状态吗(是不是可以不要rollback,出错后也会回滚到上一次正确状态)?

--你的事务开始后你分别做了 insert、update、delete 期间你没有做过任何操作,因此这个事务开始了但是没有结束--虽然你的update出错了,但是你并没有显示或隐式的结束事务,因此你在update之后rollback,会将整个事务回滚。

--2.假设执行到update出错了(没有rollback语句),commit会执行吗?

--如果执行,是不是只提交insert(正确)部分?还是insert部分也不会提交?还是commit根本不会执行?

--如果你是在sqlplus中直批量执行的命令(就是写好后直接粘贴到sqlplus窗口),那么commit 会执行。

----执行后标志整个事务的结束,并使得结果永久化,但是因为你的update出错了,因此update并没有起作用。

--如果你是通过plsql程序执行的,那么update出错后,程序直接异常,下面的commit不会被执行。

----在这种情况下,如果你的异常处理里面没有写 commit 或者 rollback的话,事务并未结束,你还需要再-

---发出commit 或 rollback结束事务。

--3.假设我在****处加入了rollback,那么回滚后是继续重新执行事务a直到成功(在事务a中循环),还是回滚到先前正确状态后跳到下一个事务?--这个已经解释的很明白了,rollback了事务就结束了,一个事务的结束标志着另外一个事务的开始。--而事务本身是不会循环的,除非你写了循环逻辑不停的处理这个事务,但是这个事务也不是你认为的重复执行事务a---而是重复的结束旧事务 开始新事务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值