文档章节

数据库隔离级别以及悲观锁和乐观锁

J
 JackMo2015
发布于 03/06 09:44
字数 825
阅读 19
收藏 2

数据库隔离级别

目的:保证事务并发读取数据的正确性

数据库事务隔离级别

(1)Read uncommitted(读未提交数据):允许事务读取未被其他事务提交的变更数据,会出现脏读、不可重复读和虚读。

(2)Read committed(读已提交数据):只允许事务读取已经被其他事务提交的变更数据,可避免脏读,仍会有不可重复读和虚读

(3)Repeatable read(可重复读):确保事务可以多次从一个字段中读取相同的值,在此事务持续期间,禁止其他事务对此字段的更新,可避免脏读、不可重复读仍会有虚读。

(4)Serializable(序列化):确保事务可以从一个表中读取相同的行,在事务持续期间,禁止其他事务对该表执行插入、更新和删除操作,可避免所有并发问题,但性能低。

MySQL支持四种事务隔离级别,其中REPEATABLE READ为默认事务隔离级别。

 

设置说明:隔离级别越高,越能保证数据的完整性和一致性,但对并发性的影响越大。对于大多数应用程序,数据库系统的隔离级别设为ReadCommitted。能避免脏读取,而且具有较好的并发性能。对于不可重复读、虚读和第二类丢失更新这些并发问题,采用悲观锁或乐观锁。

 

悲观锁和乐观锁

悲观锁:每次拿数据时怕别人会修改,所以都会先上锁,当其他事务要访问该数据时就会阻塞。一般用在表锁、行锁、读锁和写锁,在操作前先上锁。

乐观锁:每次拿数据时认为别人不会修改,不会上锁,但在更新时会先判断一下在此期间别人是否有更新该数据,可以使用版本号等机制。

适用于:读取多、写少的情况,可以提高吞吐量。

DB2事务隔离级别:

(1)Uncommitted read(UR——未提交读)

读取数据时,对表加IN表锁,而不会对数据行加锁。修改数据时,则在数据上加X锁以及相应表级别锁(修改操作与CS处理相同)。

并发性:丢失更新、脏读、不可重复读和虚读都有可能发生

(2)Cursor stability(CS——游标稳定性)默认级别:仅锁住当前处理的记录

锁定游标定位的当前行。读取加NS锁,修改加X锁,带有修改的查询加U锁。锁定持续到读取下一条或事务结束。

并发性:丢失更新和脏读不会发生;但有可能出现不可重复读和虚读。

(3)Read statility(RS——读稳定性)

只是锁定事务实际检索和修改的行(读取的话加NS,修改的话加X,有修改意向加U)

并发性:丢失更新、脏读、不可重复读不会发生;但有可能出现虚读。

(4)Repeatable read(RR)

会对select的所有行加锁,对所有扫描的行加锁

并发性:丢失更新、脏读、不可重复读和虚读都不会发生

本文转载自:

共有 人打赏支持
J
粉丝 3
博文 127
码字总数 40073
作品 0
广州
高级程序员
私信 提问
mysql事务和锁 SELECT FOR UPDATE

事务: 当然有的人用begin /begin work .推荐用START TRANSACTION 是SQL-99标准启动一个事务。 当用set autocommit = 0 的时候,你以后所有的sql都将作为事务处理,直到你用commit确认或 ro...

SibylY
2016/08/22
172
0
Hibernate事务与并发问题处理(乐观锁与悲观锁) [转]

Hibernate事务与并发问题处理(乐观锁与悲观锁) 一、数据库事务的定义   数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作。事务处理可以确保除非事务性单元...

祥子哥哥
2014/06/10
0
0
.NET:处理数据库事务中的并发

原帖地址:http://c.jinhusns.com/u/%E7%94%9F%E6%B4%BB/b-183 概述 几乎所有的企业应用程序都有多个用户和后台线程,它们可以同时更新数据库。两个数据库处理事务同时访问同一份数据的情形很...

whp610
2013/09/02
416
0
mysql隔离级别与悲观锁、乐观锁

1、什么是悲观锁,乐观锁 悲观锁大多数情况下依靠数据库的锁机制实现,以保证操作最大程度的独占性。但随之而来的就是数据库性能的大量开销,特别是对长事务而言,这样的开销往往无法承受。而...

JackMo2015
03/06
0
0
数据库的锁机制

在MySQL事务隔离中已经提到了事务隔离级别和脏读、不可重复读、幻读产生的原因。为了应对这些问题,主流数据库都提供了锁机制,并引入了事务隔离级别的概念。 并发控制 在计算机科学,特别是...

Hosee
2016/06/01
189
0

没有更多内容

加载失败,请刷新页面

加载更多

当S8遇上边缘计算:谈阿里云ENS对直播业务场景的支撑

摘要: 类似S8赛事这样的大型活动直播的特点和技术挑战是什么?为什么业务要下沉到边缘?自建边缘节点和与云服务厂商合作到底该如何选择?边缘节点服务(ENS)又是如何进行技术支撑?提供的针...

阿里云官方博客
7分钟前
1
0
supervisor安装配置

supervisor安装配置 安装 wget -c https://files.pythonhosted.org/packages/44/60/698e54b4a4a9b956b2d709b4b7b676119c833d811d53ee2500f1b5e96dc3/supervisor-3.3.4.tar.gztar -zxvf su......

jackmanwu
18分钟前
1
0
laravel定时器

民间高手: https://blog.csdn.net/zhezhebie/article/details/79205414 官方文档: https://laravel-china.org/docs/laravel/5.5/scheduling/1325...

vio小黑
40分钟前
0
0
Apache Zeppelin安装及使用

Apache Zeppelin官网:http://zeppelin.apache.org/ Apache Zeppelin介绍:A web-based notebook that enables interactive data analytics. You can make beautiful data-driven, interacti......

GordonNemo
41分钟前
4
0
关于python开发多个项目环境配置Anaconda

关于Anaconda用来管理Python的包和环境 下载并安装Anaconda 创建项目:windows键+R ==> 进入CMD => 输入conda create -n 项目名称 python=3 conda info -e 查看项目以及项目所在的位置,默认...

上官清偌
43分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部