哪位大侠举例解释一下事务隔离模式Read Committed和Repeatable Read?
Thanks

解决方案 »

  1.   

    --先创建表:
    CREATE TABLE tb(id int,val int)
    INSERT tb VALUES(1,10)
    INSERT tb VALUES(2,20)然后在连接1中,执行:
    SET TRANSACTION ISOLATION LEVEL READ COMMITTED
    BEGIN TRANSACTION
        SELECT * FROM tb;  --这个SELECT结束后,就会释放掉共享锁
        
        WAITFOR DELAY '00:00:05'  --模拟事务处理,等待5秒
        
        SELECT * FROM tb;   --再次SELECT tb表
    ROLLBACK  --回滚事务在连接2中,执行
    UPDATE tb SET
        val = val + 10
    WHERE id = 2;--------
    回到连接1中.可以看到.两次SELECT的结果是不同的.
    因为在默认的READ COMMITTED隔离级别下,SELECT完了.就会马上释放掉共享锁.
    --示例2.REPEATABLE READ连接1:SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
    BEGIN TRANSACTION
        SELECT * FROM tb;  --这个SELECT结束后,就会释放掉共享锁
        
        WAITFOR DELAY '00:00:05'  --模拟事务处理,等待5秒
        
        SELECT * FROM tb;   --再次SELECT tb表
    ROLLBACK  --回滚事务
    连接2:
    UPDATE tb SET
        val = val + 10
    WHERE id = 2;---
    可以看到连接2被阻塞了.而且连接1中.两次SELECT的结果是一样的.
    因为REPEATABLE READ隔离级别下的共享锁保留到事务结束.
    所以别的事务的X锁与S锁不兼容.所以连接2等待.
      

  2.   


    示例2中的"--这个SELECT结束后,就会释放掉共享锁" copy时应该修改下。
      

  3.   

    http://www.cnblogs.com/ego/articles/1456317.html