事务隔离级别(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的锁机制(四)——概述(各种事务隔离级别发生的影响)
六.各种事务隔离级别发生的影响 修改数据的用户会影响同时读取或修改相同数据的其他用户.即这些用户可以并发访问数据.如果数据存储系统没有并发控制,则用户可能会看到以下负面影响: · 未提交的依赖关系(脏 ...
随机推荐
- HTML5入门以及新标签
HTML5 学习总结(一)--HTML5入门与新增标签 目录 一.HTML5概要 1.1.为什么需要HTML5 1.2.什么是HTML5 1.3.HTML5现状及浏览器支持 1.4.HTML5特性 ...
- 【转】WPF DataGrid 获取选中的当前行某列值
方法一:DataRowView mySelectedElement = (DataRowView)dataGrid1.SelectedItem; string result = mySelectedE ...
- python第一天 - dict
dict key-value集合. d = { ': 'a', ': 'b', ': 'c' } (一).获取集合长度:len(d) = 3(二).获取值: 方式一:d[key];例:d['1'] = ...
- Neutron 如何支持多种 network provider - 每天5分钟玩转 OpenStack(70)
Neutron 的架构是非常开放的,可以支持多种 network provider,只要遵循一定的设计原则和规范.本节我们将开始讨论这个主题. 先讨论一个简单的场景:在 Neutorn 中使用 lin ...
- input(file)按钮美化
<!DOCTYPE HTML> <html> <body> <input type="file" id="upload" ...
- matlab基础教程——根据Andrew Ng的machine learning整理
matlab基础教程--根据Andrew Ng的machine learning整理 基本运算 算数运算 逻辑运算 格式化输出 小数位全局修改 向量和矩阵运算 矩阵操作 申明一个矩阵或向量 快速建立一 ...
- ASP.NET MVC中获取URL地址参数的两种写法
一.url地址传参的第一种写法 1.通过mvc中默认的url地址书写格式:控制器/方法名/参数 2.实例:http://localhost:39270/RequestDemo/Index/88,默认参 ...
- XmlReader和XElement组合之读取大型xml文档
简介 在.NET framework 中存在大量操作xml数据的类库和api,但在.NET framework 3.5后我们的首选一般就是linq to xml. linq to xml操作xml数据 ...
- 【C#进阶系列】26 计算限制的异步操作
什么是计算限制的异步操作,当线程在要使用CPU进行计算的时候,那么就叫计算限制. 而对应的IO限制就是线程交给IO设备(键鼠,网络,文件等). 第25章线程基础讲了用专用的线程进行计算限制的操作,但是 ...
- 疯狂Android讲义 - 学习笔记(六)
第7章 7.1 使用简单图片 7.1.1 使用Drawable对象 7.1.2 Bitmap和BitmapFactory 7.2 绘图 7.2.1 Android绘图基础:Canvas.Paint等 ...