日期:2014-01-08  浏览次数:20489 次

        当锁定用作并发控制机制时,它可以处理并发问题。这使所有事务得以在彼此完全隔离的环境中运转,但是任何时候都可以有多个正在运转的事务。
         可串行性是通过运转一组并发事务达到的数据库形状,等同于这组事务按某种顺序连续执行时所达到的数据库形状。

SQL-92 隔离级别
         虽然可串行性对于事务确保数据库中的数据在所有时间内的正确性相当重要,然而许多事务并不总是要求完全的隔离。例如,多个作者任务于同一本书的不同章节。新章节可以在任意时候提交到项目中。但是,对于曾经编辑过的章节,没有编辑人员的批准,作者不能对此章节进行任何更改。这样,虽然有未编辑的新章节,但编辑人员仍可以确保在任意时间该书籍项目的正确性。编辑人员可以查看以前编辑的章节以及最近提交的章节。

          事务预备接受不分歧数据的级别称为隔离级别。隔离级别是一个事务必须与其它事务进行隔离的程度。较低的隔离级别可以添加并发,但代价是降低数据的正确性。相反,较高的隔离级别可以确保数据的正确性,但可能对并发产生负面影响。使用程序要求的隔离级别确定了 SQL Server 使用的锁定行为。

SQL-92 定义了下列四种隔离级别,

SQL Server 支持所有这些隔离级别:
未提交读(事务隔离的最低级别,仅可保证不读取物理损坏的数据)。
提交读(SQL Server 默认级别)。
可反复读。
可串行读(事务隔离的最高级别,事务之间完全隔离)。
       如果事务在可串行读隔离级别上运转,则可以保证任何并发堆叠事务均是串行的。
下面四种隔离级别允许不同类型的行为。

         隔离级别               脏读不可反复读取             幻像未提交读是是是提交读否是是可反复读否否是可串行读否否否

        事务必须运转于可反复读或更高的隔离级别以防止丢失更新。当两个事务检索相反的行,然后基于原检索的值对行进行更新时,会发生丢失更新。如果两个事务使用一个 UPDATE 语句更新行,并且不基于以前检索的值进行更新,则在默认的提交读隔离级别不会发生丢失更新。