oracle( 0 )事务
一。并发引起的问题
脏读:能读取未提交的数据
不可重复读: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 )事务的更多相关文章
- 数据库事务隔离级ORACLE数据库事务隔离级别介绍
本文系转载,原文地址:http://singo107.iteye.com/blog/1175084 数据库事务的隔离级别有4个,由低到高依次为Read uncommitted.Read committ ...
- oracle之事务和锁
Oracle的事务和锁(PPT-I-283-293) 10.1 什么是事务 必须具备以下四个属性,简称ACID 属性:原子性(Atomicity): 事务是一个完整的操作.事务的各步操作是不可分的( ...
- Oracle一个事务中的Insert和Update执行顺序
今天碰到了一个奇怪的问题,是关于Oracle一个事务中的Insert和Update语句的执行顺序的问题. 首先详细说明下整个过程: 有三张表:A,B,C,Java代码中有一段代码是先在表A中插入一条数 ...
- [转]了解oracle自治事务
http://blog.csdn.net/indexman/article/details/7799862 1.什么是Oracle自治事务 在官方文档中,是这样的定义的“Autonomous tran ...
- Oracle之事务
一,oracle的事务: 是指对数据操作的一系列动作的统称.即:事务的任务便是使数据库从一种状态变换成为另一种状态,这不同于文件系统,它是数据库所特用的. 事务有四大特性(ACID): 1,原子性(a ...
- 浅述Oracle分布式事务概念
着系统的复杂性不断增加,我们所面对的分布式系统渐渐增加.分布式文件系统.分布式消息队列系统等等层出不穷,在一些行业特别是互联网行业应用广泛.分布式数据库也是目前使用比较常用的分布式系统之一. 简单来说 ...
- 数据库比较工具DBCompareTool for Oracle 0.2.5发布
迁移数据库sql to oracle http://www.oracle.com/technetwork/cn/database/migration/connect-sqlserver-1945229 ...
- Oracle - 数据更新 - 事务
/* 事务 事务是为了控制数据异步访问所使用的一种技术 就类似于java中的锁机制 synchronized,只不过功能更加强大 事务不能进行嵌套,当我们开启一个事务的之后作的每一次dml语句都属于这 ...
- MongoDB 4.0 事务实现解析
MongoDB 4.0 引入的事务功能,支持多文档ACID特性,例如使用 mongo shell 进行事务操作 > s = db.getMongo().startSession() sessio ...
随机推荐
- Ajax 分析方法
我们如何查看到 Ajax 请求: 以 https://m.weibo.cn/u/2830678474 这个网页为例,按 F12,加载网页,然后选择资源类型为 XHR 的就可以看到 Ajax 请求了 我 ...
- rgba和opacity区别
首先来看rgba: R:红色值.正整数 | 百分数G:绿色值.正整数 | 百分数B:蓝色值.正整数 | 百分数A:Alpha透明度.取值0~1之间. 再看opacity: 后面的取值为从 0.0 (完 ...
- print($arr,true)的参数true表示将$arr的值返会,而不是打印
之前通过error_log()来调试php, 发现收到的json字符前边总是有一个1,一直以为是哪里直接出现了print.print_r.echo.var_dump(), 后来发现原来是某处用了形如e ...
- 数据流-------C#文件和byte[]互换问题
今天使用FileInfo.CopyTo的时候出现问题,当然并不是使用的问题,而是一些细节. 不过报错的时候,一度让我认为,copyto这个方法,给的参数必须是文件夹,而不是文件.所以就有了下面的查找 ...
- .NET 正则表达式使用高级技巧之替换类介绍
因为.net的基本正则语法和Perl5基本相同,所以基本语法你可以去下载一下M$的JS帮助文档,上面有详细的说明 \d表示什么,{,}表示什么,\[表示什么……,这里我只想提醒大家一点,为了避免和反向 ...
- Writing Reentrant and Thread-Safe Code(译:编写可重入和线程安全的代码)
Writing Reentrant and Thread-Safe Code 编写可重入和线程安全的代码 (http://www.ualberta.ca/dept/chemeng/AIX-43/sha ...
- Android Studio项目提交(或更新)到github的方法
一 配置github登陆信息 二 上传工程到github 1. 2. 点击Share按钮 3. 点击ok按钮 状态栏提示: 4. 点击 No 按钮 5.AS右下脚弹出提示框 查看github网站,已经 ...
- 基本类型算法题目学习(EPI)
1.关于奇偶校验的方法中,如何快速的求取一个64-bit的数字的奇偶校验位.(如果1的位数为奇数,则奇偶校验位为1,如果1的位数为偶数,则奇偶校验位为0) a.暴力枚举法采用一位一位进行计算,一位一位 ...
- 使用eclipse执行maven-release-plugin插件发布jar异常问题(.project)(Cannot prepare the release because you have local modifications )
开发是用的eclipse,里面有工程文件.project这种文件,运行release:prepare的时候报异常: Cannot prepare the release because you hav ...
- [APP] Android 开发笔记 003-使用Ant Release 打包与keystore加密说明
接上节 [APP] Android 开发笔记 002 5. 使用ant release 打包 1)制作 密钥文件 release.keystore (*.keystore) keytool -genk ...