正在学那个事务,英文教材上说的隔离等级让我一头雾水,拜求哪位大侠给解释下下。

解决方案 »

  1.   

    隔离级别
    当锁定用作并发控制机制时,它可以解决并发问题。这使所有事务得以在彼此完全隔离的环境中运行,但是任何时候都可以有多个正在运行的事务。可串行性是通过运行一组并发事务达到的数据库状态,等同于这组事务按某种顺序连续执行时所达到的数据库状态。 SQL-92 隔离级别
    尽管可串行性对于事务确保数据库中的数据在所有时间内的正确性相当重要,然而许多事务并不总是要求完全的隔离。例如,多个作者工作于同一本书的不同章节。新章节可以在任意时候提交到项目中。但是,对于已经编辑过的章节,没有编辑人员的批准,作者不能对此章节进行任何更改。这样,尽管有未编辑的新章节,但编辑人员仍可以确保在任意时间该书籍项目的正确性。编辑人员可以查看以前编辑的章节以及最近提交的章节。事务准备接受不一致数据的级别称为隔离级别。隔离级别是一个事务必须与其它事务进行隔离的程度。较低的隔离级别可以增加并发,但代价是降低数据的正确性。相反,较高的隔离级别可以确保数据的正确性,但可能对并发产生负面影响。应用程序要求的隔离级别确定了 SQL Server 使用的锁定行为。SQL-92 定义了下列四种隔离级别,SQL Server 支持所有这些隔离级别: 未提交读(事务隔离的最低级别,仅可保证不读取物理损坏的数据)。
    提交读(SQL Server 默认级别)。
    可重复读。
    可串行读(事务隔离的最高级别,事务之间完全隔离)。 
    如果事务在可串行读隔离级别上运行,则可以保证任何并发重叠事务均是串行的。下面四种隔离级别允许不同类型的行为。隔离级别 脏读 不可重复读取 幻像 
    未提交读 是 是 是 
    提交读 否 是 是 
    可重复读 否 否 是 
    可串行读 否 否 否 
    事务必须运行于可重复读或更高的隔离级别以防止丢失更新。当两个事务检索相同的行,然后基于原检索的值对行进行更新时,会发生丢失更新。如果两个事务使用一个 UPDATE 语句更新行,并且不基于以前检索的值进行更新,则在默认的提交读隔离级别不会发生丢失更新。
      

  2.   

    隔离级别
    当锁定用作并发控制机制时,它可以解决并发问题。这使所有事务得以在彼此完全隔离的环境中运行,但是任何时候都可以有多个正在运行的事务。可串行性是通过运行一组并发事务达到的数据库状态,等同于这组事务按某种顺序连续执行时所达到的数据库状态。 SQL-92 隔离级别
    尽管可串行性对于事务确保数据库中的数据在所有时间内的正确性相当重要,然而许多事务并不总是要求完全的隔离。例如,多个作者工作于同一本书的不同章节。新章节可以在任意时候提交到项目中。但是,对于已经编辑过的章节,没有编辑人员的批准,作者不能对此章节进行任何更改。这样,尽管有未编辑的新章节,但编辑人员仍可以确保在任意时间该书籍项目的正确性。编辑人员可以查看以前编辑的章节以及最近提交的章节。事务准备接受不一致数据的级别称为隔离级别。隔离级别是一个事务必须与其它事务进行隔离的程度。较低的隔离级别可以增加并发,但代价是降低数据的正确性。相反,较高的隔离级别可以确保数据的正确性,但可能对并发产生负面影响。应用程序要求的隔离级别确定了 SQL Server 使用的锁定行为。SQL-92 定义了下列四种隔离级别,SQL Server 支持所有这些隔离级别: 未提交读(事务隔离的最低级别,仅可保证不读取物理损坏的数据)。
    提交读(SQL Server 默认级别)。
    可重复读。
    可串行读(事务隔离的最高级别,事务之间完全隔离)。 
    如果事务在可串行读隔离级别上运行,则可以保证任何并发重叠事务均是串行的。下面四种隔离级别允许不同类型的行为。
      

  3.   

    数据库的隔离级别主要是为读操作定义保护级别的;对于修改写操作,无论哪种隔离级别都可以保证写操作的正确执行。SQL标准为三种副作用:Dirty reads: 事务T2提交了数据,事务T1这时读取了T2提交的数据,T2发生异常rollback,那么T1读取的数据就是有问题的数据,是dirty read。 
    unrepeatable reads:事务T1读取数据以后,事务T2修改了T1读取的数据,事务T1以同样的查询从数据库读取数据,就会发现和上一次读取的不一致,所以称为unrepeatable reads。phantom reads:事务T1查询数据库并返回数据,事务T2插入了新的数据,事务T1一同样的查询读取数据库数据,发现会多出一些数据,所以称为phantom reads。 
    设置合适的数据库事务隔离级别可以防止上面问题的发生,但是隔离级别越高并发性越差一般会设置为read-committed
     Dirty Reads Unrepeatable Reads  Phantom  Reads  
    Read Uncommited 
     Y 
     Y
     Y
     
    Read commited 
     N
     Y
     Y
     
    Repeatable Read 
     N
     N
     Y
     
    Serializable N
     N
     N
     
      

  4.   

    http://bjyzxxds.javaeye.com/blog/464604
      

  5.   

    要理解事务隔离等级,必须首先了解四种并发问题:丢失的更新、脏读、不可重复读、幻影记录;以及基本的锁机制。这个“无枪狙击手”的 blog 上有。也可以到 technet 站点下载相关的视频
    http://technet.microsoft.com/zh-cn/dd722679.aspx
      

  6.   

    以前对数据库的隔离级别,有所了解,但不知道真正其中的区别。今天就讨论一下这4个隔离级别  下面是4个隔离级别,在SQL server 2005里的介绍:  READ UNCOMMITTED  指定语句可以读取已由其他事务修改但尚未提交的行。  READ COMMITTED  指定语句不能读取已由其他事务修改但尚未提交的数据。这样可以避免脏读。其他事务可以在当前事务的各个语句之间更改数据,从而产生不可重复读取和幻像数据  REPEATABLE READ  其他事务可以插入与当前事务所发出语句的搜索条件相匹配的新行。如果当前事务随后重试执行该语句,它会检索新行,从而产生幻读  SERIALIZABLE  范围锁处于与事务中执行的每个语句的搜索条件相匹配的键值范围之内。这样可以阻止其他事务更新或插入任何行  建立环境:     create table t_emp(id numeric(10) 
      ,name varchar(10), 
      salary numeric(10,2)); 
      插入数据:      insert into t_emp values(1,'jack',10000.50); 
      insert into t_emp values(2,'jack2',8000.50); 
      insert into t_emp values(3,'jack3',120000); 
      insert into t_emp values(4,'jack4',5000); 
      insert into t_emp values(5,'jack5',3000); 
      脏读  如果一个事务在提交操作结果之前,另一个事务可以看到该结果,就会发生这种情况  测试语句一:     SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 
      begin tran 
      select * from dbo.t_emp where id=1 
      测试语句二:      SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 
      begin tran 
      update t_emp set name='zping.com' where id=1