文档章节

数据库的隔离级别

小强斋太
 小强斋太
发布于 2016/11/09 20:07
字数 1104
阅读 16
收藏 0
点赞 0
评论 0

 

数据库隔离级别

http://wenku.baidu.com/view/924c6dea172ded630b1cb688.html

数据库隔离级别数据库提供了四种事务隔离级别, 不同的隔离级别采用不同的锁类开来实现.在四种隔离级别中,Serializable的级别最高, ReadUncommited级别最低.大多数数据库的默认隔离级别为: Read Commited,Sql Server , Oracle.少数数据库默认的隔离级别为Repeatable Read, MySQL InnoDB存储引擎即使是最低的级别,也不会出现第一类丢失更新问题 .

 mysql中

select @@tx_isolation可以查看隔离级别

更改: set transaction isolation level read uncommitted;

  1. isolation_read_uncommitted: 这是事务最低的隔离级别,它充许令外一个事务可以看到这个事务未提交的数据。这种隔离级别会产生脏读,不可重复读和幻像读。
  2. isolation_read_committed: 保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据
  3. isolation_repeatable_read: 这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻像读。它除了保证一个事务不能读取另一个事务未提交的数据外,还保证了避免下面的情况产生(不可重复读)
  4. isolation_serializable 这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。 除了防止脏读,不可重复读外,还避免了幻像读。     


Read Uncommited :读未提交数据(会出现脏读,不可重复读,幻读 ,避免了第一类丢失更新)

Read Commited   :读已提交的数据(会出现不可重复读,幻读)
Repeatable Read :
可重复读(会出现幻读)
Serializable    :
串行化 

隔离级别

是否存在脏读

是否存在不可重复读

是否存在幻读

Read Uncommited

Y

Y

Y

Read Commited

N

Y

Y

Repeatable Read

N

N

Y

Serializable

N

N

N

丢失更新  
当两个或多个事务选择同一行,然后基于最初选定的值更新该行时,会发生丢失更新问题。每个事务都不知道其它事务的存在。最后的更新将重写由其它事务所做的更新,这将导致数据丢失。  

:
事务A和事务B同时修改某行的值,

1.
事务A将数值改为1并提交
2.
事务B将数值改为2并提交。
这时数据的值为2,事务A所做的更新将会丢失。
解决办法:对行加锁,只允许并发一个更新事务。

脏读:一个事务读到另一个事务未提交的更新数据例:
1.Mary
的原工资为1000,财务人员将Mary的工资改为了8000(但未提交事务
)       
2.Mary
读取自己的工资 ,发现自己的工资变为了8000,欢天喜地!

3.
而财务发现操作有误,回滚了事务,Mary的工资又变为了1000,像这样,Mary记取的工资数8000是一个脏数据。

不可重复读:在同一个事务中,多次读取同一数据,返回的结果有所不同.换句话说就是,后续读取可以读到另一个事务已提交的更新数据.相反"可重复读"在同一事务多次读取数据时,能够保证所读数据一样,也就是后续读取不能读到另一事务已提交的更新数据.:
1.
在事务1中,Mary读取了自己的工资为1000,操作并没有完成

2.
在事务2中,这时财务人员修改了Mary的工资为2000,并提交了事务.
3.
在事务1中,Mary再次读取自己的工资时,工资变为了
2000
解决办法:如果只有在修改事务完全提交之后才可以读取数据,则可以避免该问题。

幻读:一个事务读取到另一个事务已提交的insert数据.

:第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时 (此时第一事务还未提交),第二个事务向表中插入一行新数据。这时第一个事务再去读取表时,发现表中还有没有修改的数据行,就好象发生了幻觉一样

 

本文转载自:http://www.cnblogs.com/xqzt/archive/2012/09/05/5637191.html

共有 人打赏支持
小强斋太
粉丝 0
博文 181
码字总数 0
作品 0
广州
浅谈数据库事物的四大特性(ACID)以及事物的隔离级别

事物的四大特性  如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity)   原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因...

HenrySun ⋅ 2016/08/20 ⋅ 0

数据库的并发控制

并发控制机制试图在多个事务中交叉(同时)执行Read和Write操作,并使得交叉执行的结果与串行调度执行的结果一样。这个交叉执行给人的感觉是事务在并行执行。并发控制非常重要,因为事务在共...

柳哥 ⋅ 2014/06/29 ⋅ 0

事务隔离级别新看法!

前言 我前段时间在写代码的时候,经常考虑并发问题,对事物的安全性、隔离级别需要更深的了解,所以翻看了网上绝大部分关于事务的文章。但是看了之后还是有些疑惑,例如事务的四种隔离级别,...

Awisper ⋅ 2016/01/10 ⋅ 0

数据库事务的ACID及三种并发问题

数据库中事务的四大特性 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: 1、 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,...

zjg23 ⋅ 2016/09/30 ⋅ 0

事务隔离级别和脏读的快速入门(转载)

关键要点 仅从ACID或非ACID角度考虑问题是不够的,你应知道你的数据库支持何种事务隔离级别。一些数据库宣称自己具有“最终一致性”,但却可能对重复查询返回不一致的结果。相比于你所寻求的...

treenewtreenew ⋅ 2016/11/16 ⋅ 0

mysql乱七八糟的可重复读隔离级别实现

mysql的隔离级别并非是按照标准实现的,作为从pg切过来的程序员还真是不太适应,这篇文章讨论mysql隔离级别实现的,希望对大家能有帮助。 什么是事务 事务是数据库一组读写操作的集合,事务具...

徐文韬 ⋅ 2017/09/11 ⋅ 0

事务隔离级别(isolation level)

概述 隔离属性是原子性、一致性、隔离性和持久性 (ACID) 这四个属性之一,逻辑工作单元必须具备这四个属性才能称为事务。 隔离级别定义了事务与事务之间的隔离程度。 隔离级别与并发性是互为...

coda ⋅ 2013/11/19 ⋅ 0

JDBC--处理事务与隔离级别

一、事务 在数据库中,所谓事务是指一组逻辑操作单元,使数据从一种状态变换到另一种状态。 (1)事务的ACID(acid)属性 1. 原子性(Atomicity) 原子性是指事务是一个不可分割的工作单位,事务...

大道无名 ⋅ 2016/07/02 ⋅ 0

事务四大特征:原子性,一致性,隔离性和持久性(ACID)

一、基本概念 事务的原子性(Atomicity) 事务的原子性指的是,事务中包含的程序作为数据库的逻辑工作单位,它所做的对数据改操作要全部执行,要么全部不执行。这种特性称为原子性。 事务的原...

Idea ⋅ 01/09 ⋅ 0

脏读、幻读、不可重复读和丢失更新

1.脏读 -- 一个事务读取到另外一个事务没有提交的数据 事务T1:更新一条数据 -->事务T2:读取事务T1更新的记录 事务T1:调用commit进行提交 此时事务T2读取到的数据是保存在数据库内存中的数...

拐美人 ⋅ 06/11 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

容器之重命名镜像

使用docker tag命令来重命名镜像名称,先执行help,查看如何使用如下 mjduan@mjduandeMacBook-Pro:~/Docker % docker tag --helpUsage:docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TA...

汉斯-冯-拉特 ⋅ 3分钟前 ⋅ 0

with 的高级用法

那么 上下文管理器 又是什么呢? 上下文管理器协议包含 __enter__ 和 __exit__ 两个方法。with 语句开始运行时,会在上下文管理器对象上调用 __enter__ 方法。with 语句运行结束后,会在上下...

阿豪boy ⋅ 22分钟前 ⋅ 0

使用 jsoup 模拟登录 urp 教务系统

需要的 jsoup 相关 jar包:https://www.lanzous.com/i1abckj 1、首先打开教务系统的登录页面,F12 开启浏览器调试,注意一下 Request Headers 一栏的 Cookie 选项,我们一会需要拿这个 Cook...

大灰狼时间 ⋅ 22分钟前 ⋅ 0

关于线程的创建

转自自己的笔记: http://note.youdao.com/noteshare?id=87584d4874acdeaf4aa027bdc9cb7324&sub=B49E8956E145476191C3FD1E4AB40DFA 1.创建线程的方法 Java使用Thread类代表线程,所有的线程对......

MarinJ_Shao ⋅ 34分钟前 ⋅ 0

工厂模式学习

1. 参考资料 工厂模式-伯乐在线 三种工厂-思否 深入理解工厂模式 2. 知识点理解 2.1 java三种工厂 简单工厂 工厂模式 抽象工厂 2.2 异同点 逐级复杂 简单工厂通过构造时传入的标识来生产产品...

liuyan_lc ⋅ 46分钟前 ⋅ 0

Java NIO

1.目录 Java IO的历史 Java NIO之Channel Java NIO之Buffer Java NIO之Selector Java NIO之文件处理 Java NIO之Charset Java 可扩展IO 2.简介 “IO的历史”讲述了Java IO API从开始到现在的发...

士别三日 ⋅ 50分钟前 ⋅ 0

[Err] ORA-24344: success with compilation error

从txt文本复制出创建function的脚本,直接执行,然后报错:[Err] ORA-24344: success with compilation error。 突然发现脚本的关键字,居然不是高亮显示。 然后我把脚本前面的空格去掉,执行...

wenzhizhon ⋅ 59分钟前 ⋅ 0

Spring Security授权过程

前言 本文是接上一章Spring Security认证过程进一步分析Spring Security用户名密码登录授权是如何实现得; 类图 调试过程 使用debug方式启动https://github.com/longfeizheng/logback该项目,...

hutaishi ⋅ 今天 ⋅ 0

HAProxy基于KeepAlived实现Web高可用及动静分离

前言 软件负载均衡一般通过两种方式来实现: 基于操作系统的软负载实现 基于第三方应用的软负载实现 LVS是基于Linux操作系统实现的一种软负载,而HAProxy则是基于第三方应用实现的软负载。 ...

寰宇01 ⋅ 今天 ⋅ 0

微软自研处理器的小动作:已经开始移植其他平台的工具链

微软将 Windows 10 、Linux 以及工具链如 C/C++ 和 .NET Core 运行时库、Visual C++ 2017 命令行工具、RyuJIT 编辑器等移植到其自主研发的处理器架构 E2。微软还移植了广泛使用的 LLVM C/C++...

linux-tao ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部