事务隔离级别(IsolationLevel)
事务的特性(ACID)
1、原子性(Atomicity)
事物是数据库的逻辑工作单位,事务中的诸多操作要么全做要么全不做
2、一致性(Consistency)
事务执行结果必须是使数据库从一个一致性状态变到另一个一致性状态
3、隔离性(Isolation)
一个数据的执行不能被其他事务干扰
4、持续性/永久性(Durability)
一个事务一旦提交,它对数据库中的数据改变是永久性的
隔离级别与并发性是互为矛盾的:隔离程度越高,数据库的并发性越差;隔离程度越低,数据库的并发性越好,这点很好理解
事务的隔离级别(IsolationLevel)
// 摘要:
// Specifies the transaction locking behavior for the connection.
public enum IsolationLevel
{
// 摘要:
// A different isolation level than the one specified is being used, but the
// level cannot be determined.
Unspecified = -,
//
// 摘要:
// The pending changes from more highly isolated transactions cannot be overwritten.
Chaos = ,
//
// 摘要:
// A dirty read is possible, meaning that no shared locks are issued and no
// exclusive locks are honored.
ReadUncommitted = ,
//
// 摘要:
// Shared locks are held while the data is being read to avoid dirty reads,
// but the data can be changed before the end of the transaction, resulting
// in non-repeatable reads or phantom data.
ReadCommitted = ,
//
// 摘要:
// Locks are placed on all data that is used in a query, preventing other users
// from updating the data. Prevents non-repeatable reads but phantom rows are
// still possible.
RepeatableRead = ,
//
// 摘要:
// A range lock is placed on the System.Data.DataSet, preventing other users
// from updating or inserting rows into the dataset until the transaction is
// complete.
Serializable = ,
//
// 摘要:
// Reduces blocking by storing a version of data that one application can read
// while another is modifying the same data. Indicates that from one transaction
// you cannot see changes made in other transactions, even if you requery.
Snapshot = ,
}
常用状态分析:
1、ReadUncommitted
表示:未提交读。当事务A更新某条数据的时候,不容许其他事务来更新该数据,但可以进行读取操作
2、ReadCommitted
表示:提交读。当事务A更新数据时,不容许其他事务进行任何的操作包括读取,但事务A读取时,其他事务可以进行读取、更新
3、RepeatableRead
表示:重复读。当事务A更新数据时,不容许其他事务进行任何的操作,但是当事务A进行读取的时候,其他事务只能读取,不能更新
4、Serializable
表示:序列化。最严格的隔离级别,当然并发性也是最差的,事务必须依次进行。
读取现象
通过一些现象,可以反映出隔离级别的效果。这些现象有:
- 更新丢失(lost update):当系统允许两个事务同时更新同一数据时,发生更新丢失。
- 脏读(dirty read):当一个事务读取另一个事务尚未提交的修改时,产生脏读。
- 不重复读(nonrepeatable read):同一查询在同一事务中多次进行,由于其他提交事务所做的修改或删除,每次返回不同的结果集,此时发生非重复读。(A transaction rereads data it has previously read and finds that another committed transaction has modified or deleted the data. )
- 幻读(phantom read):同一查询在同一事务中多次进行,由于其他提交事务所做的插入操作,每次返回不同的结果集,此时发生幻像读。(A transaction reexecutes a query returning a set of rows that satisfies a search condition and finds that another committed transaction has inserted additional rows that satisfy the condition. )
隔离级别与读取现象
隔离级别 | 脏读 Dirty Read | 不可重复读取 NonRepeatable Read | 幻读 Phantom Read |
---|---|---|---|
未授权读取/未提交读 read uncommitted | 可能发生 | 可能发生 | 可能发生 |
授权读取/提交读 read committed | - | 可能发生 | 可能发生 |
重复读 read repeatable | - | - | 可能发生 |
序列化 serializable | - | - | - |
常见数据库的默认级别
数据库 | 默认隔离级别 |
Oracle | read committed |
SqlServer | read committed |
MySQL(InnoDB) | Read-Repeatable |
事务隔离级别(IsolationLevel)的更多相关文章
- JDBC 事务隔离级别
JDBC 事务隔离级别 先解释一下:a:脏读取:一个事务读取了另外一个并行事务未提交的数据b:不可重复读取:一个事务再次读取之前的数据时得到的数据不一致,被另外一个事务修改c:虚读:一个事务重 ...
- .NET:“事务、并发、并发问题、事务隔离级别、锁”小议,重点介绍:“事务隔离级别"如何影响 “锁”?
备注 我们知道事务的重要性,我们同样知道系统会出现并发,而且,一直在准求高并发,但是多数新手(包括我自己)经常忽略并发问题(更新丢失.脏读.不可重复读.幻读),如何应对并发问题呢?和线程并发控制一样, ...
- (7)MySQL进阶篇SQL优化(InnoDB锁-事务隔离级别 )
1.概述 在我们在学习InnoDB锁知识点之前,我觉得有必要让大家了解它的背景知识,因为这样才能让我们更系统地学习好它.InnoDB与MyISAM的最大不同有两点:一是支持事务(TRANSACTION ...
- SQL Server 中的事务与事务隔离级别以及如何理解脏读, 未提交读,不可重复读和幻读产生的过程和原因
原本打算写有关 SSIS Package 中的事务控制过程的,但是发现很多基本的概念还是需要有 SQL Server 事务和事务的隔离级别做基础铺垫.所以花了点时间,把 SQL Server 数据库中 ...
- 30分钟全面解析-SQL事务+隔离级别+阻塞+死锁
以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化. 本系列主要是针对T-SQL的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础] ...
- SQL Server 事务隔离级别详解
标签: SQL SEERVER/MSSQL SERVER/SQL/事务隔离级别选项/设置数据库事务级别 SQL 事务隔离级别 概述 隔离级别用于决定如果控制并发用户如何读写数据的操作,同时对性能也有一 ...
- InnoDB事务隔离级别
转载于:http://blog.csdn.net/wudongxu/article/details/8623610 SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的 ...
- 1031MySQL事务隔离级别详解
转自http://xm-king.iteye.com/blog/770721 SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的.低级别的隔离级一般支 ...
- 对于大于8046 bytes的行,RCSI/SI事务隔离级别无效
自SQL Server 2005起,我们有了READ COMMITTED SNAPSHOT ISOLATION level (RCSI) 和SNAPSHOT ISOLATION level (SI)两 ...
- (转)SQL SERVER的锁机制(四)——概述(各种事务隔离级别发生的影响)
六.各种事务隔离级别发生的影响 修改数据的用户会影响同时读取或修改相同数据的其他用户.即这些用户可以并发访问数据.如果数据存储系统没有并发控制,则用户可能会看到以下负面影响: · 未提交的依赖关系(脏 ...
随机推荐
- iOS 真机调试不能连接网络的排错过程
开发环境: macOS 10.12.1 Xcode 8.1 Qt 5.8 gSOAP 2.8 iPhone 6S+iOS 10.1.1 问题: 使用 Qt Quick 写了一个跨平台的应用,在Wi ...
- 深入学习jQuery元素尺寸和位置操作
× 目录 [1]尺寸设置 [2]位置设置 前面的话 对于javascript来说,元素尺寸有scroll.offset.client三大属性,以及一个强大的getBoundingClientRect( ...
- 了解screen对象的常用视图属性
前面的话 screen对象基本上只用来表明客户端的能力,其中包括浏览器窗口外部的显示器的信息,如像素高度和宽度等.每个浏览器中的screen对象都包含着各不相同的属性.本文将详细介绍screen对象的 ...
- ES6 - Note1:块级作用域与常量
在ES6以前,ES不支持块级作用域,只有全局作用域和函数作用域,所有变量的声明都存在变量声明提升. 1.let 关键字 声明一个块级变量,只在一个代码块中有效,如果在块外面访问便会报错,如下所示: { ...
- 窥探Swift编程之错误处理与异常抛出
在Swift 2.0版本中,Swift语言对其错误处理进行了新的设计,当然了,重新设计后的结果使得该错误处理系统用起来更爽.今天博客的主题就是系统的搞一下Swift中的错误处理,以及看一下Swift中 ...
- Android动画学习(二)——Tween Animation
前两天写过一篇Android动画学习的概述,大致的划分了下Android Animation的主要分类,没有看过的同学请移步:Android动画学习(一)——Android动画系统框架简介.今天接着来 ...
- Android样式之selector
日常开发当中,难免会出现这样一种情况,为一个按钮.TextView...设置一个点击状态的颜色改变,可能是background背景的改变,也可能是字体颜色的改变,简单点说:默认状态下,字体颜色或者背景 ...
- 关于IE6的PNG图像透明使用AlphaImageLoader的缺点
PNG32的alpha透明效果在IE6下会出现bug,出现灰色背景.而目前的解决方案就是 IE提供的滤镜.需要注意的是滤镜并不是对原图片进行修改,而是对相应的html元素进行 修改.所以在一个html ...
- C语言实现控制台中光标随意移动
开始准备学习下C,新手哦~~ 今天弄了个控制台程序,光标可以随意在DOS下移动~~ 先放一张效果图,不过很丑,大家能不能看懂,哈哈,就是 I Love You. 代码注释都有,其实好多东西我都是从其他 ...
- springMVC学习笔记(一)-----springMVC原理
一.什么是springmvc springMVC是spring框架的一个模块,springMVC和spring无需通过中间整合层进行开发. springMVC是一个基于mvc的web框架. Sprin ...