一。并发引起的问题

脏读:能读取未提交的数据

不可重复读:T1事务读取数据后,T2事务执行更新操作,使T1无法再现前一次读取的结果。分三种情况:

1.值不同

2.少了记录

3.多了记录

幻象读(后两种不可重复读):T1时间执行查询,在T2时间重新查询时,有更多或更少的行满足条件。

二。ANSI隔离级别

ReadUncommitted  允许一个事务查看另一个事务对数据所做的未提交的更改。

ReadCommitted  在该事务提交之前,在该事务中所作的任何更改,在该事务之外都不可见。

RepeatableRead  执行时保持将读取的行锁定,从而使其他事务在此事务这前不能更改这些行。

Serializable  在执行时将表锁定。从而使其他事务不能执行。

隔离级别 脏读 不可重复读 幻象读
ReadUnCommited 允许 允许 允许
ReadCommitted    允许 允许
RepeatableRead     允许
Serializable       

READ_UNCOMMITTED
会出现脏读、不可重复读、幻读(隔离级别最低,并发性能高)

READ_COMMITTED
会出现不可重复读、幻读问题(锁定正在读取的行)

REPEATABLE_READ
会出幻读(锁定所读取的所有行)

SERIALIZABLE
保证所有的情况不会发生(锁表)

三。Oracle中的隔离级别及实现机制

   Oracle数据库支持read committed和 serializable这两种事务隔离级别。所以Oracle不支持脏读,即Oracle中不允许一个会话读取其他事务未

提交的数据修改结果,从而防止了由于事务回滚发生的读取不正确。

   Oracle回滚段,在修改数据记录时,会把这些记录被修改之前的结果存入undo段中。Oracle读取操作不会阻碍更新操作,更新操作也不会阻碍

读取操作,这样在Oracle中的各种隔离级别下,读取操作都不会等待更新事务结束,更新操作也不会因为另一个事务中的读取操作而发生等待,这也是

Oracle事务处理的一个优势所在。

 

  事务的四个基本要素:

    1:原子性,事务中各个操作应该是一个整体性,原子性的部分。

    2:一致性,事务提交后,各个操作的修改前和之后的结果应该全部一致性的成功或失败。

    3:隔离性,事务之间不得互相干扰。

    4:持久性,即事务提交后,应该持久保存。

  事务并发时可能导致的几个问题以及隔壁级别之间的差异,当时简单性的题了一下,似乎对不上题;

    1:脏读:事务A修改了某值,被事务B读出,但恰巧事务A回滚了,事务B此时持有的值即为脏读数据。

    2:不可重复读:事务A读取了某值,之后事务B读取该值并进行了更改,此时事务A/B持有的值是不同的。

    3:幻读:事务A修改某值并提交,之后事务B也修改了该值并提交,事务A提交的值被事务B提交的值覆盖掉了。

    4:串行读:事务A执行时,事务B必须等待事务A执行完毕才可执行,即事务要按顺序执行,而不能同步执行。

    据此划分出四个隔离级别:

    1:未提交读(read uncommitted): 脏读,也就是可能读取到其他会话中未提交事务修改的数据。

    2:提交读(read committed): 只能读取到已经提交的数据,多数数据库(除开MYSQL)默认都是该级别。会有不可重复读的问题。

    3:可重复读(repeated read): 在同一个事务内的查询都是事务开始时刻一致的,InnoDB的默认级别,可能导致幻读,但InnoDB解决了这个问题。

    4:串行读(serializable): 即锁表或锁行,每次读都需要获得表(行)级共享锁,读写相互阻塞。

oracle( 0 )事务的更多相关文章

  1. 数据库事务隔离级ORACLE数据库事务隔离级别介绍

    本文系转载,原文地址:http://singo107.iteye.com/blog/1175084 数据库事务的隔离级别有4个,由低到高依次为Read uncommitted.Read committ ...

  2. oracle之事务和锁

    Oracle的事务和锁(PPT-I-283-293) 10.1 什么是事务 必须具备以下四个属性,简称ACID 属性:原子性(Atomicity):  事务是一个完整的操作.事务的各步操作是不可分的( ...

  3. Oracle一个事务中的Insert和Update执行顺序

    今天碰到了一个奇怪的问题,是关于Oracle一个事务中的Insert和Update语句的执行顺序的问题. 首先详细说明下整个过程: 有三张表:A,B,C,Java代码中有一段代码是先在表A中插入一条数 ...

  4. [转]了解oracle自治事务

    http://blog.csdn.net/indexman/article/details/7799862 1.什么是Oracle自治事务 在官方文档中,是这样的定义的“Autonomous tran ...

  5. Oracle之事务

    一,oracle的事务: 是指对数据操作的一系列动作的统称.即:事务的任务便是使数据库从一种状态变换成为另一种状态,这不同于文件系统,它是数据库所特用的. 事务有四大特性(ACID): 1,原子性(a ...

  6. 浅述Oracle分布式事务概念

    着系统的复杂性不断增加,我们所面对的分布式系统渐渐增加.分布式文件系统.分布式消息队列系统等等层出不穷,在一些行业特别是互联网行业应用广泛.分布式数据库也是目前使用比较常用的分布式系统之一. 简单来说 ...

  7. 数据库比较工具DBCompareTool for Oracle 0.2.5发布

    迁移数据库sql to oracle http://www.oracle.com/technetwork/cn/database/migration/connect-sqlserver-1945229 ...

  8. Oracle - 数据更新 - 事务

    /* 事务 事务是为了控制数据异步访问所使用的一种技术 就类似于java中的锁机制 synchronized,只不过功能更加强大 事务不能进行嵌套,当我们开启一个事务的之后作的每一次dml语句都属于这 ...

  9. MongoDB 4.0 事务实现解析

    MongoDB 4.0 引入的事务功能,支持多文档ACID特性,例如使用 mongo shell 进行事务操作 > s = db.getMongo().startSession() sessio ...

随机推荐

  1. Couldn’t load locSDK3

    在项目的libs目录下新建一个文件夹,命名为armeabi-v7a,然后将liblocSDK3.so复制一份到该文件夹 ok

  2. Python时间戳与时间字符串互相转换实例代码

    #设a为字符串import timea = "2011-09-28 10:00:00" #中间过程,一般都需要将字符串转化为时间数组time.strptime(a,'%Y-%m-% ...

  3. 有了Auto Layout,为什么你还是害怕写UITabelView的自适应布局?

    本文转载至 http://www.cnblogs.com/ios122/p/4832859.html Apple 算是最重视应用开发体验的公司了.从Xib到StoryBoard,从Auto Layou ...

  4. <转>13个实用的Linux find命令示例

    注:本文摘自青崖白鹿,翻译的妈咪,我找到了! -- 15个实用的Linux find命令示例, 感谢翻译的好文. 除了在一个目录结构下查找文件这种基本的操作,你还可以用find命令实现一些实用的操作, ...

  5. [OpenGL]用OpenGL制作动画

    //在窗口内绘制一个移动的矩形 /*我们通常还可以用OpenGL程序创建动画效果,这里我们利用前面的例子,绘制正方形,并使这个正方形在窗口的边框反弹.这里需要创建一个循环,在每次调用显示回调函数之前改 ...

  6. java框架---->lucene的使用(一)

    Lucene是一个全文检索的框架,apache组织提供了一个用Java实现的全文搜索引擎的开源项目.这里我们对apache的lucene的框架做一个简单的介绍.心甘情愿这四个字,透着一股卑微,但也有藏 ...

  7. c++ 类前置声明【转】

    [转自 here] 在编写C++程序的时候,偶尔需要用到前置声明(Forward declaration).下面的程序中,带注释的那行就是类B的前置说明.这是必须的,因为类A中用到了类B,而类B的声明 ...

  8. Android.mk (1) 函数

    https://www.jianshu.com/p/46224d15fc5f 从函数说起 大家都习惯看从头,从构建目标讲起的,导致每篇文档熟的都是前面的部分.很多教程也都是想办法能够观其大略,从整体上 ...

  9. 第四步 使用 adt-eclipse 打包 Cordova (3.0及其以上版本) + sencha touch 项目

    cordova最新中文api http://cordova.apache.org/docs/zh/3.1.0/ 1.将Cordova 生成的项目导入到adt-eclipse中,如下: 项目结构如下: ...

  10. php 函数合并 array_merge 与 + 的区别

    array_merge()是PHP语言中的一个函数,作用是将两个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面.返回作为结果的数组. 如果输入的数组中有相同的字符串键名,该键的键值为最 ...