事务有四个特性

第一原子性,事务具有独立的不能被拆分的,不能只做部分,事务的性质是要么全做,要么都不做。

第二统一性,在事务执行之前和事务执行之后的数据是一致。

第三隔离性,事务是独立的,开发者不能查看中间状态。对同一张表同一时间最多只能有一个事务处理。

第四永久性,事务的发生对数据库的影响是永久的。

事务管理系统引入了锁的机制,正是因为锁的这种机制,一个事务才能与其他的事务隔离,根据你给每个事务设置的Isolation level不同,锁的行为也不相同。在.NET transaction scope中,有四个非常重要的隔离级别。

  1. Serializable
  2. Repeatable Read
  3. Read Committed
  4. Read UnComitted

Read Uncommitted: 允许读取脏数据,一个事务能看到另一个事务还没有提交的数据。

Read Committed: 确保事务读取的数据都必须是已经提交的数据。它限制了读取中间的,没有提交的,脏的数据。但是它不能确保当事务重新去读取的时候,读的数据跟上次读的数据是一样的,也就是说当事务第一次读取完数据后,该数据是可能被其他事务修改的,当它再去读取的时候,数据可能是不一样的。

Repeatable Read: 是一个更高级别的隔离级别,如果事务再去读取同样的数据,先前的数据是没有被修改过的。

Serializable: 它做出了最有力的保证,除了每次读取的数据是一样的,它还确保每次读取没有新的数据。

举例说明, 你现在有个表T,列名C,并且包含一条数据在里面,我们假设是‘1’, 现在你有个简单的执行任务:

BEGINTRANSACTION;

SELECT *FROMT;

WAITFOR DELAY'00:01:00'

SELECT *FROMT;

COMMIT;

这是一个简单的,执行了两次读操作的任务,在两次读取中间我们延迟一分钟。

如果是Read Commited, 那第二次读取可能返回任意值,因为另外一个同时进行的事务可能更新,删除,插入新的数据。第二个查询总是看到最新的数据。

如果是Repeatable Read, 那第二次读取就能确保跟第一个已经读取的行的数据是一样的。但是另外一个同时进行的事务可能会新增加行,但是第一次读取的行是不能删除和修改的。

如果是Serializable, 那就能确保两次读取看到的数据和行数是一样的。没有数据修改,删除,也没有新行添加进来。

TransactionScope IsolationLevel 事务隔离级别的更多相关文章

  1. 关于mssql数据库锁和事务隔离级别

    事务隔离级别有4种,这4种级别只是对于读操作,也就是select有不同程度的支持, 读未提交:不会对事务里读出来的数据附加任何锁 读已提交:会对事务里读出来的数据附加共享锁,读完就释放共享锁,其他事务 ...

  2. .NET:“事务、并发、并发问题、事务隔离级别、锁”小议,重点介绍:“事务隔离级别"如何影响 “锁”?

    备注 我们知道事务的重要性,我们同样知道系统会出现并发,而且,一直在准求高并发,但是多数新手(包括我自己)经常忽略并发问题(更新丢失.脏读.不可重复读.幻读),如何应对并发问题呢?和线程并发控制一样, ...

  3. JDBC 事务隔离级别

    JDBC 事务隔离级别     先解释一下:a:脏读取:一个事务读取了另外一个并行事务未提交的数据b:不可重复读取:一个事务再次读取之前的数据时得到的数据不一致,被另外一个事务修改c:虚读:一个事务重 ...

  4. (7)MySQL进阶篇SQL优化(InnoDB锁-事务隔离级别 )

    1.概述 在我们在学习InnoDB锁知识点之前,我觉得有必要让大家了解它的背景知识,因为这样才能让我们更系统地学习好它.InnoDB与MyISAM的最大不同有两点:一是支持事务(TRANSACTION ...

  5. SQL Server 中的事务与事务隔离级别以及如何理解脏读, 未提交读,不可重复读和幻读产生的过程和原因

    原本打算写有关 SSIS Package 中的事务控制过程的,但是发现很多基本的概念还是需要有 SQL Server 事务和事务的隔离级别做基础铺垫.所以花了点时间,把 SQL Server 数据库中 ...

  6. 30分钟全面解析-SQL事务+隔离级别+阻塞+死锁

    以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化.  本系列主要是针对T-SQL的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础] ...

  7. SQL Server 事务隔离级别详解

    标签: SQL SEERVER/MSSQL SERVER/SQL/事务隔离级别选项/设置数据库事务级别 SQL 事务隔离级别 概述 隔离级别用于决定如果控制并发用户如何读写数据的操作,同时对性能也有一 ...

  8. InnoDB事务隔离级别

    转载于:http://blog.csdn.net/wudongxu/article/details/8623610 SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的 ...

  9. 1031MySQL事务隔离级别详解

    转自http://xm-king.iteye.com/blog/770721 SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的.低级别的隔离级一般支 ...

随机推荐

  1. c读mysql产生乱码问题

    在编写接口API时,发现中文字utf8输入的在linux下采用c读取显示为”??”问号,这是由于编码造成的. 很简单的两个地方做修改就搞定. 1.先找到mysql的my.cnf配置文件/etc/my. ...

  2. 乐视手机查看运行内存方法、EUI(Eco User Interface)乐视系统查看手机运行内存方法

    点击按钮,左下角,方格, 显示如下:

  3. CI 笔记5 (CI3.0 默认控制器,多目录)

    在ci3.x中,不支持多级子目录的默认控制器设置, 解决方法如下: 在index.php中,添加  $routing['directory'] = 'admin';然后在默认的router.php的默 ...

  4. 关于C#与.NET Framework

    前几天,有一个做测试的问我.NET Framework是什么,和C#是什么关系呢. 下面我就来解释一下.NET Framework是什么:.NET Framework是一个框架,是应用程序运行时所需要 ...

  5. websocket以及自定义协议编程一些总结

    以下仅供自己翻阅,因为时间久了会忘2.发送缓冲区主要是为了处理发送前一些小内容,可以自己控制flush,或者write的不是那么频繁因为没必要.至于大内容就没必要了.3.其实tcp以上的通信协议也好, ...

  6. phpcms源码解析(2)

    1.程序启动逻辑: 首先由文件\index.php调用create_app(),此函数在文件\phpcms\base.php中,它完成初始化应用程序,调用函数load_sys_class并提供参数ap ...

  7. HTML5的Server-Sent Events (SSE)

    HTML5有一个Server-Sent Events(SSE)功能,允许服务端推送数据到客户端.(通常叫数据推送).我们来看下,传统的WEB应用程序通信时的简单时序图: 现在Web App中,大都有A ...

  8. PHP不依赖系统自动执行机制

    不依赖系统,以及不依赖yii事物机制,则考虑人为触发.触发可以写在总体的公共页面上,但是考虑到对数据库以及WWW服务器的压力问题,程序的延迟问题,需要对执行函数进行一些优化. 首先,我们考虑对数据库的 ...

  9. 高德地图关键字搜索删除上一次搜索的Marker

    方法:Marker类的  setMap(null);方法 高德是通过循环调用addmarker(i,d)方法  创建marker标记,所以我们需要 把创建的marker标记压入到一个数组,再第二次搜索 ...

  10. 史上最强NDK入门项目实战

    目标: 利用NDK生成SO库,使用SO库进行JNI调用,在Android sdcard创建文件并写入数据. 工具: NDK1.5 R1, android SDK1.5 R1, SDCARD, Ecli ...