Oracle数据库----------------------------事务处理

关于Oracle数据库的学习记录:

二十五、事务处理
1.事务处理:
如果说现在假设要执行以下的一种转账业务操作,今天XXX要给YYY转账1000W,需要以下几步:
**第一步:从XXX的账户上减少1000W
**第二步:在YYY的账户上增加1000W
**第三步:随后XXX支付50元转账费用
如果说执行到第二步的时候出现了错误,也就是YYY没有收到1000W,第一步不应该执行,所有数据应该恢复到原始状态。那么这样的操作需要执行三条更新操作,并且是属于同一个操作业务,为了保证这三个更新操作要么同时完成,要么同时失败,就可以使用事务这一概念来进行处理
事务是针对于数据更新使用的,也就是说只有DML 的更新操作才存在有事务的支持
Session(会话,以后只要是此概念都表示唯一的一个登录用户),在Oracle之中么一个登录到数据库上的用户都会自动分配一个Session,即:每一个Session都表示不同的用户,而每一个Session上都拥有独立的事务处理操作。每一个Session的事务处理上都可以使用两个命令:
**commit:事务提交,即:如果已经执行了多条更新操作,那么只有执行了commit之后,更新才会真正发出,在没有执行commit之前,所有的更新操作都会保存在缓冲区之中;
**rollback:事务回滚操作,即:如果发现更新的操作有问题,则恢复所有的更新操作,以保证原始数据不被破坏

范例:现在执行一次更新操作
DELETE FROM myemp WHERE empno=7369;
现在执行的是删除操作,但是这个删除的指令被保存在了缓冲区中,也就是说现在数据库中的数据还没有被删除,如果没有提交,发现更新操作出现了错误,由于此时没有提交事务,可以利用ROLLBACK进行恢复,如果说提交了事务,那么就无法恢复数据了

2、死锁
每一个Session都有独立的事务处理,那么如果SessionA与SessionB更新了同一个数据会如何呢?
范例:SessionA发出如下操作
UPDATE myemp SET sal=5000 WHERE empno=7566;
范例:SessionB发出如下操作
UPDATE myemp SET comm=5000 WHERE empno=7566;
由于前一个Session是先发出的更新指令,并且没有进行任何的事务处理操作(commit,rollback),那么第二个Session会一直等待第一个Session更新完毕后再发出更新
对于同一个数据的更新,多个Session执行更新操作,一定是一个Session等待另一个Session完成更新操作

总结:1.只有更新操作才会存在事务处理,DDL不支持事务处理,而且在Oracle里面,如果发生了DDL操作,或出现一个严重的问题:所有未提交的更新事务将会被自动提交
2.两个重要的命令:commit和rollback

猜你喜欢

转载自blog.csdn.net/amuist_ting/article/details/80667207