现在的位置: 首页 > 综合 > 正文

oracle 学习-事务

2013年09月07日 ⁄ 综合 ⁄ 共 1252字 ⁄ 字号 评论关闭

事务属性-ACID

原子性 Atomicity        事务原子性强调了一个事务是一个逻辑工作单元,是一个整体,是不可分割的。
一致性 Consistency 一个事务执行一项数据库操作,事务将使数据库库从一种一致性状态变换成另一种一致性状态       
隔离性 Isolation 在事务未提交前,它操作的数据,对其他用户不可见。
持久性 Durability 事务的持久性是指一旦事务成功完成,该事务对数据库所事假的所有更新都是永久的

数据库事务:
以第一个DML语句的执行作为开始
以下面的其中之一作为结束
commilt或rollback
ddl或dcl语句(自动提交)
用户会话正常结束--commit
系统异常终了 --rollback
(SQL>set autocommit on  '设置自动提交)

并发与数据的读取
当多个会发同时访问(操作)相同数据时,将会出现一些意想不到的结果
--脏读  Dirty reads                           :当一个事务读取另一个事务尚未提交的修改时,产生脏读。
--不可重复度  Non-repaetable reads         :同一查询在同一事务中多次进行,在此期间,由于其他事务提交了对数据的修改或删除,每次返回不同的结果(在一个事务过程中,同样的数据被2次读取,并得到不同的值,称为不可重复度)
--幻读  Phantom reads                          :同一查询在同一事务中多次进行,由于其他提交事务所做的插入操作,虽然查询条件相同,每次返回的结果集却不同(在一个事务中,同样的sql执行2次时,得到的结果集不同)

事务隔离等级
                                 脏读        不可重复度        幻读
Read uncommitted              Y        Y                         Y
Read committed              N        Y                         Y
Repeatable read              N        N                         Y
Serializable                              N        N                         N

Oracle事务隔离等级
Read committed        Oracle默认的隔离等级,对一条SQL可以保证数据的一致性,对于一个事务,无法做到repeatable read
Serializable        只能看到事务开始时所以提交的改变以及自身的改变
Read-Only        只能看到事务开始时所有提交的改变,自身不允许DML操作

只读事务隔离等级
1) 只读事务只允许执行查询操作,不允许执行任何DML操作事务
2) 当使用只读事务可以确保取得特定的时间点的数据
SQL> set transaction read only

Serializable
只能看到事务开始时所有提交的改变以及自身的改变
只针对DML操作的改变
DDL操作队该事务可见
使用Serializable隔离等级的情景:
修改操作比较短的事务
事务中存在多条SQL语句,需要数据从事务一开始就保持一致性。

抱歉!评论已关闭.