经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » Oracle » 查看文章
Oracle 事务处理
来源:cnblogs  作者:格物致知_Tony  时间:2019/5/28 9:07:33  对本文有异议

  事务是又一系列语句构成的逻辑工作单元,通常是为了完成一定业务逻辑而将一条或者多条语句 “封装” 起来,使它们与其他语句之间出现一个逻辑上的便捷,并形成相对独立的一个工作单元。

  一、事务概述

    当使用事务修改多个数据表时,如果在处理的过程中出现了某种错误,例如系统死机或者出现其他等情况,则返回结果是全部数据均没有被保存。

    对事务处理的结果只有两种:

      一种是在事务处理的过程中,如果发生了某种错误则整个事务全部回滚,使所有对数据的修改全部撤销,事务对数据库的操作是单步执行的,当遇到错误时可以随时地回滚;

      另一种是如果没有发生任何错误且每一步的执行都成功,则整个事务全部被提交。

    从而可以看出,有效地使用事务不但可以提高数据的安全性,而且还可以增强数据的处理效率。

    事务包含 4 种重要的属性,被统称为 ACID (原子性、一致性、隔离性和持久性),一个事务必须通过 ACID。

    (1)原子性(Atomic):  事务是一个整体的工作单元,事务对数据库所做的操作要么全部执行,要么全部取消。假如某条语句执行失败,则所有语句全部回滚。

    (2)一致性(ConDemoltent):  事务在完成时,必须使所有的数据都保持一致状态。在相关的数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。如果事务成功,则所有数                                                                   据将变成一个新的状态;如果事务失败,则所有数据将处于开始之前的状态

    (3)隔离性(Isolated):   由事务所作的修改必须与其他事务所作的修改隔离。事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务                                                          不会查看中间状态的数据。

    (4)持久性(Durability):  当事务提交后,对数据库所做的修改就会永久保存下来。

 

 

  二、操作事务

    Oracle 11g 中的事务是隐式自动开始的,它不需要用户显示地执行开始事务语句。但对于事务的结束处理,则需要用户进行指定的操作,通常在以下情况时, Oracle 认为一个事务结束了。

    (1) 执行 commit 语句提交事务。

    (2) 执行 rollback  语句撤销事务。

    (3) 执行一条数据定义语句,如果 create、drop 和 alter 等语句。如果该语句执行成功,那么 Oracle 系统会自动执行 commit 命令;否则, Oracle 系统会自动执行 rollback 命令。

    (4) 执行一个数据控制语句,比如 grant、revoke 等控制命令,这种操作执行完毕, Oracle 系统会自动执行 commit 命令。

    (5) 正常地断开数据库的连接、正常地退出 SQL*Plus 环境,则 Oracle 系统会自动执行 commit 命令;否则, Oracle 系统会自动执行 rollback 命令。

    总结: Oracle 结束一个是事务归根结底是那么执行 commit 命令,要么执行 rollback 命令。

    1、提交事务(commit语句)

    2、回滚事务(Rollback语句)

原文链接:http://www.cnblogs.com/niujifei/p/10934095.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号