ORACLE数据库事务隔离级别
为什么80%的码农都做不了架构师?>>>
事务隔离级别:一个事务对数据库的修改与并行的另一个事务的隔离程度。
两个并发事务同时访问数据库表相同的行时,可能存在以下三个问题:
1、幻想读:事务T1读取一条指定where条件的语句,返回结果集。此时事务T2插入一行新记录,恰好满足T1的where条件。然后T1使用相同的条件再次查询,结果集中可以看到T2插入的记录,这条新纪录就是幻想。
2、不可重复读取:事务T1读取一行记录,紧接着事务T2修改了T1刚刚读取的记录,然后T1再次查询,发现与第一次读取的记录不同,这称为不可重复读。
3、脏读:事务T1更新了一行记录,还未提交所做的修改,这个T2读取了更新后的数据,然后T1执行回滚操作,取消刚才的修改,所以T2所读取的行就无效,也就是脏数据。
为了处理这些问题,SQL标准定义了以下几种事务隔离级别
READ UNCOMMITTED 幻想读、不可重复读和脏读都允许。
READ COMMITTED 允许幻想读、不可重复读,不允许脏读
REPEATABLE READ 允许幻想读,不允许不可重复读和脏读
SERIALIZABLE 幻想读、不可重复读和脏读都不允许
Oracle数据库支持READ COMMITTED 和 SERIALIZABLE这两种事务隔离级别。所以Oracle不支持脏读
SQL标准所定义的默认事务隔离级别是SERIALIZABLE,但是Oracle 默认使用的是READ COMMITTED
设置隔离级别使用 SET TRANSACTION ISOLATION LEVEL [READ UNCOMMITTED|READ COMMITTED|REPEATABLE READ|SERIALIZABLE]
下面是oracle 设置SERIALIZABLE隔离级别一个示例:
左面是事务T1,右面是事务T2,因为T2级别为SERIALIZABLE,所以即使事务T1在提交了数据之后,事务T2还是看不到T1提交的数据,幻想读和不可重复读都不允许了。
那如何能查看到T1新增的记录呢? 上面T1和T2是并发执行,在T1执行insert的时候事务T2已经开始了,因为T2级别是SERIALIZABLE,所以T2所查询的数据集是T2事务开始前数据库的数据。即事务T1在事务T2开始之后的insert和update操作的影响都不会影响事务T2。现在重新开启一个事务T3 就可以看到T1新增的记录了。
当下列事件发生时,事务就开始了:
1、连接到数据库,并执行第一条DML语句
2、前一个事务结束后,又输入了另一条DML语句
转载于:https://my.oschina.net/elain/blog/383302
ORACLE数据库事务隔离级别相关推荐
- 数据库事务隔离级ORACLE数据库事务隔离级别介绍
本文系转载,原文地址:http://singo107.iteye.com/blog/1175084 数据库事务的隔离级别有4个,由低到高依次为Read uncommitted.Read committ ...
- 数据库事务隔离级别-- 脏读、幻读、不可重复读(清晰解释)
一.数据库事务隔离级别 数据库事务的隔离级别有4个,由低到高依次为Read uncommitted .Read committed .Repeatable read .Serializable ,这四 ...
- 数据库事务隔离级别+Spring 声明性事务隔离级别
数据库事务隔离级别 数据库提供了四种事务隔离级别, 不同的隔离级别采用不同的锁类开来实现. 在四种隔离级别中, Serializable的级别最高, Read Uncommited级别最低. 大多数数 ...
- mysql数据库事务隔离级别是_数据库事务隔离级别-MySQL为例 · Sean
在银行系统的存取款过程中,当遇到对一个账户并发存取的时候,系统该如何处理比较好.可能不少人会想到线程同步,然而在应用层使用同步会导致对象锁定,大大影响并发效率.此时,充分利用数据库的事务隔离机制可以很 ...
- 概述MySQL数据库---事务隔离级别
同一个应用程序中的多个事务或不同应用程序中的多个事务在同一个数据集上并发执行时, 可能会出现许多意外的问题,事务并发处理可能引起的问题可分为如下三种类型: 脏读(Drity Read): 已知有两个事 ...
- 数据库事务隔离级别及脏读、不可重复读、幻读的理解
开篇声明,由于两位大佬排版不够美观,然后又发现一些歧义,因此我集大佬之所长,精心整理并加以完善,可放心阅读. http://blog.csdn.net/yuxin6866/article/deta ...
- mysql数据库事务隔离级别演示
mysql数据库事务隔离级别演示 关键词: 一.基本概念 二.事务的四个特性(ACID) 三.事务的用法 3.1 相关命令 3.2 使用步骤 四.数据库的隔离级别 五.示例演示(每组事务结束手动com ...
- 数据库事务隔离级别有哪些?
数据库事务隔离级别: 1.Read Uncommitted(读未提交): 2.Read Committed(读已提交): 3.Repeatable Read(可重复读取): 4.Serializabl ...
- PG数据库事务隔离级别
Postgres数据库事务隔离级别介绍 0. What is Database Transaction? 数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列 ...
最新文章
- 8.继续分析一破解加密码获取-最最最简单的注册机
- PhantomJS快速入门教程(转)
- Halcon 记录1
- 【USACO】电子游戏 有条件的背包
- (十二)算法设计思想之“分而治之”
- 通过Dapr实现一个简单的基于.net的微服务电商系统(四)——一步一步教你如何撸Dapr之订阅发布...
- Linux系统CPU相关信息查询
- javascript实现图片放大镜效果
- 在C#中用RX库和await来实现直观的状态机
- 在内容也中寻找母板页中的控件
- Atitit 提升团队开发效率项目进度的一些大的流程方向attilax总结
- OMS订单管理系统框架图
- 自媒体入门如何制作出优质视频,有这5款软件就够了
- RuntimeError: no valid convolution algorithms available in CuDNN
- Mac大小写切换需长按caps lock键解决办法
- 网站被移动运营方屏蔽怎么办?
- mc服务器文件夹改皮肤,我的世界皮肤放在哪个文件夹位置及更换方法解析
- 大数据-Flume(二)
- 使用 Cloudreve 快速搭建一个强大的个人云盘
- [笔记]Class.forName 时static代码的运行
热门文章
- java内存不足错误_调试Java内存不足错误
- php 回调通知 连连支付_php app支付宝回调(异步通知)详解
- 一个上帝视角的java游戏_从上帝视角看Java如何运行
- 怎么更好掌握Web前端技术?JS的跨域是怎么回事?
- 深入理解web.xml中配置/和/*的区别
- B - C语言实验——整数位
- PHP判断客户端协议类型是否为https
- STM32系列单片机在进入main函数前都在干些什么?
- 【树莓派】:配置+SSH+VNC,实现深度学习目标检测
- Faster R-CNN源码中ROI Pooling的解析