Tsql 如何使肮脏的阅读

Tsql 如何使肮脏的阅读,tsql,dirtyread,Tsql,Dirtyread,这是脏读的一个例子吗 T1和T2事务 SET IMPLICIT_TRANSACTIONS OFF 这不是一个肮脏的阅读。有关其作用的详细信息,请参见: 要获得脏读,需要将dbo.table1中的select column1与(NOLOCK)一起放置。With(NOLOCK)读取未提交的数据,如果事务以某种方式回滚,这些数据可能会消失,并且永远不会真正存在 获取脏读的另一种方法是使用:隔离级别读取未提交。下面是一个示例,说明如何通过查看MyCleanTable Id | Value ------

这是脏读的一个例子吗

T1和T2事务

SET IMPLICIT_TRANSACTIONS OFF

这不是一个肮脏的阅读。有关其作用的详细信息,请参见:

要获得脏读,需要将dbo.table1中的select column1与(NOLOCK)一起放置。With(NOLOCK)读取未提交的数据,如果事务以某种方式回滚,这些数据可能会消失,并且永远不会真正存在


获取脏读的另一种方法是使用:隔离级别读取未提交。

下面是一个示例,说明如何通过查看
MyCleanTable

Id | Value
----------
1  | I am clean!
2  | I am clean!

  • 使用未提交的隔离级别执行简单查询事务

    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
    
    BEGIN TRAN
    
        SELECT * FROM [MyCleanTable]
    
  • 输出:

    Id | Value
    ----------
    1  | I am clean!
    2  | I am clean!
    
    Id | Value
    ----------
    1  | I am dirty! ------> "dirty read"
    2  | I am clean!
    
  • 使用事务_b使用脏值更新表:

     BEGIN TRAN
    
         UPDATE [ConcurrencyDemo].[dbo].[MyCleanTable]
         SET [Value] = 'I am dirty'  
         WHERE [Id] = 1 
    
    ROLLBACK;
    
  • 在事务_a中执行另一个查询并提交:

        SELECT * FROM [ConcurrencyDemo].[dbo].[MyCleanTable]
    
    COMMIT;
    
  • 输出:

    Id | Value
    ----------
    1  | I am clean!
    2  | I am clean!
    
    Id | Value
    ----------
    1  | I am dirty! ------> "dirty read"
    2  | I am clean!
    
  • 回滚事务_b的更新:

     BEGIN TRAN
    
         UPDATE [ConcurrencyDemo].[dbo].[MyCleanTable]
         SET [Value] = 'I am dirty'  
         WHERE [Id] = 1 
    
    ROLLBACK;
    
  • 在此阶段,表格被回滚到其原始值:

    Id | Value
    ----------
    1  | I am clean!
    2  | I am clean!
    

    但是第3节的查询读取了一个脏值。

    这是什么环境?Transact-SQL?是SQL环境