文档章节

数据库的隔离级别

小强斋太
 小强斋太
发布于 2016/11/09 20:07
字数 1104
阅读 55
收藏 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
广州
私信 提问
加载中

评论(0)

python关于MySQL的API -- pymysql模块

1.模块安装 pip install pymysql 2.执行sql语句 1 import pymysql 2 3 #添加数据 4 5 conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='', db='yyy') 6 7 cursor......

osc_pv1kc2gm
2018/10/21
2
0
【Python全栈-后端开发】数据库进阶-pymysql

数据库进阶 python关于mysql的API---pymysql模块 pymsql是Python中操作MySQL的模块,其使用方法和py2的MySQLdb几乎相同。 模块安装 pip install pymysql 执行sql语句 import pymysql 连接数据...

osc_v8gts6gd
2019/03/06
1
0
数据库事务的四大特性以及事务的隔离级别-与-Spring事务传播机制&隔离级别

数据库事务的四大特性以及事务的隔离级别   本篇讲诉数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别。   如果一个数据库声称支持事务的操作,那么该数据库必须要具备...

osc_qocngpfu
2018/11/22
21
0
MySql学习17----数据库事务(01)

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

osc_g3arrcd8
2019/02/20
4
0
数据库事务的四大特性以及事务的隔离级别

本篇讲诉数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别。   如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity)  原...

1071954237
2017/10/27
33
0

没有更多内容

加载失败,请刷新页面

加载更多

(人才测评)桌面运维工程师的招聘入职测评方案

桌面运维工程师,作为IT技术支持岗位的一种,不仅要有扎实的技术基础,还要有较强的时间观念意识,同时还应具备较强的逻辑思维能力和人际沟通能力,这样才能称得上一名合格的桌面运维工程师。...

蛤蟆丸子
31分钟前
37
0
JavaFX初探(菜单)

JavaFX初探(菜单) 本节我们介绍如何创建菜单、菜单栏、增加菜单项、为菜单分类,创建子菜单、设置菜单上下文。你可以使用下面的类来创建菜单。 MenuBar MenuItem Menu CheckMenuItem Radi...

whoisliang
35分钟前
20
0
Springboot 系列(四)Spring Boot 日志框架

文章已经收录在 Github.com/niumoo/JavaNotes ,更有 Java 程序员所需要掌握的核心知识,欢迎Star和指教。 欢迎关注我的公众号,文章每周更新。、 注意:本 Spring Boot 系列文章基于 Spring...

未读代码
39分钟前
20
0
26. Go 语言中通道死锁经典错误案例详解

Hi,大家好,我是明哥。 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触...

王炳明
44分钟前
13
0
SpringBoot 整合 Redis 缓存

1.首先导入使用Maven导入jar包 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependency><......

FH-Admin
今天
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部