当前访客身份:游客 [ 登录  | 注册加入尚学堂]
直播

我来了!

拥有积分:4024
尚学堂雄起!!威武。。。

博客分类

笔记中心

课题中心

提问中心

答题中心

解答题中心

Oracle中的事务

我来了! 发表于 2年前 (2014-10-30 16:29:07)  |  评论(0)  |  阅读次数(476)| 0 人收藏此文章,   我要收藏   

Oracle中的事务

一组SQL语句操作要成为事务,数据库管理系统必须保证这组操作的原子性(Atomicity)、一致性(consistency)、隔离性(Isolation)和持久性(Durability),这就是ACDI特性

原子性:是指事物中包含的所有操作要么全做,要么全不做,也就是说事物的所有活动在数据库中要么全部反映,要么全部不反映,一保证数据时一致的。

一致性:是指数据库在事务操作前和操作处理,其中的数据必须都满足业务规定的约束。

隔离性:是指数据库允许多个并发事务同时对其中的数据进行读写好修改的能力,隔离性可以防止事务的并发执行时,由于他们的操作命令交叉执行而导致的数据不一致状态。

持久性:是指当事务结束后,它对数据库中的影响是永久的,即便系统遇到故障的情况下,数据也不会丢失。

数据库事务由以下的部分组成:

一个或多个DML 语句

一个 DDL(Data Definition Language – 数据定义语言语句

一个 DCL(Data Control Language – 数据控制语言语句

事务的执行过程:

以第一个 DML 语句的执行作为开始

以下面的其中之一作为结束:

COMMIT 或 ROLLBACK 语句

DDL 或 DCL 语句(自动提交)

用户会话正常结束

系统异常终了

备注:使用COMMIT 和 ROLLBACK语句,我们可以确保数据完整性;数据改变被提交之前预览;将逻辑上相关的操作分组。

事务控制语句

Set transaction:设置事务的属性

Set constrains:设置当前事务的约束模式,设置约束是修改数据的时候,立即起作用,还是当前事务结束后应用。

Savepoint :在事务中建立一个存储点,回滚时,可以指定回滚到什么地方,然后重新执行

Release savepoint:删除一个存储点

Rollback:回滚事务。级取消对数据库所做的任何修改

Commit:提交事务,把事务中对数据库的修改进行永久保存

数据异常

因为Oracle中支持多个事务并发执行,所以会出现下面的数据异常。

错读|脏读:当user1正在读数据库中的表A时,user2正在修改表Auser2修改完了,user1又读一遍表Auser1读出的是修改过的数据,而user2又撤消修改了,user1的读取表A,称为“错读”或者“脏读”

非重复读|不重复读:是指一个事务读取数据库中的数据后,另一个事务则更新了数据,当第一个事务再次读取其中的数据时,就会发现数据已经发生了改变,这就是非重复读取。非重复读取所导致的结果就是一个事务前后两次读取的数据不相同。

假读|幻读:如果一个事务基于某个条件读取数据后,另一个事务则更新了同一个表中的数据,这时第一个事务再次读取数据时,根据搜索的条件返回了不同的行,这就是假读。

事务中遇到的这些异常与事务的隔离性设置有关,事务的隔离性设置越多,异常就出现的越少,但并发效果就越低,事务的隔离性设置越少,异常出现的越多,并发效果越高。

选择隔离层

 针对3中读取的数据时产生的不一致现象,ANSI SQL标准92中定义了4个事务的隔离级别.如下图所示:

隔离级别

错读|脏读

非重复读|不重复读

假读|幻读

Read uncommitted(非提交读)

Read committed(提交读)

Repeatable read(可重复读)

 

Serializable(串行读)

Oracle默认的隔离级别是read committed

Oracle支持上述地址隔离层中的两种read committedSerializable除此之外oracle中还设置了read onlyread write隔离层

Serializable:设置事务的隔离层为它时,

Read only :事务中不能有任何修改数据库中的数据的操作语句,如insertupdatedeletecreate语句,read only Serializable的子集,区别是read only只读,Serializable和执行DML语句。

Read write:是默认设置,改选项表示在事务中可以有访问语句。修改语句。但不经常使用

设置事务的属性

建立 set transaction的语句

如:

Set transaction read noly

或:

Set transaction read write

或:

Set transaction isolation level read commnitted

或:

Set transaction isolation level serializable

注意:这些语句是互斥的。不能同时设置两个或两个以上的选项

分享到:0
关注微信,跟着我们扩展技术视野。每天推送IT新技术文章,每周聚焦一门新技术。微信二维码如下:
微信公众账号:尚学堂(微信号:bjsxt-java)
声明:博客文章版权属于原创作者,受法律保护。如果侵犯了您的权利,请联系管理员,我们将及时删除!
(邮箱:webmaster#sxt.cn(#换为@))
北京总部地址:北京市海淀区西三旗桥东建材城西路85号神州科技园B座三层尚学堂 咨询电话:400-009-1906 010-56233821
Copyright 2007-2015 北京尚学堂科技有限公司 京ICP备13018289号-1 京公网安备11010802015183