zoukankan      html  css  js  c++  java
  • sql server 事务隔离级别

        1.sql server 下一共有6个事务隔离级别

    -- Syntax for SQL Server and Azure SQL Database
      
    SET TRANSACTION ISOLATION LEVEL
        { READ UNCOMMITTED  //读未提交
        | READ COMMITTED    //读提交
        | REPEATABLE READ  //重复读
        | SNAPSHOT      //快照
        | SERIALIZABLE    //可序列化
        | READ COMMITTED SNAPSHOT //读提交的快照
        }

    获取事务隔离级别(isolation level)

    DBCC USEROPTIONS 

      可以看到数据库默认的transaction 级别为 read committed

    设置隔离

    设置回话隔离
    SET TRANSACTION ISOLATION LEVEL <ISOLATION NAME>
    --注意:在设置回话隔离时(REPEATABLE READ)两个单词需要用空格间隔开,但是在表隔离中可以粘在一起(REPEATABLEREAD)
    
    设置查询表隔离
    SELECT ....FROM <TABLE> WITH (<ISOLATION NAME>)

        2.1 read uncommitted 为最低隔离的等级.可以得到没有提交的数据 请看如下的例子

          窗口1:

          

           窗口2:

          

           两个脚本窗口一先执行,窗口2后执行,我们可以看到窗口2 出现了脏读,读到了还没有提交的数据 "11".

        2.2 read committed

          下面引用csdn上的描述

            指定语句不能读取已由其他事务修改但尚未提交的数据。 这样可以避免脏读。 其他事务可以在当前事务的各个语句之间更改数据,从而产生不可重复读取和虚拟数据。 该选项是 SQL Server 的默认设置。

          实际例子如下:

              窗口1:

        

         窗口2:

        

         我们可以看到窗口1的同一个事务中读取同一条数据前后会不一样,导致了  不可重复读取和虚拟数据

        3. repeatable read(重复读)

          指定语句不能读取已由其他事务修改但尚未提交的行,并且指定,其他任何事务都不能在当前事务完成之前修改由当前事务读取的数据。

        只需将 read committed 例子的 isolation level 改为 repeatable read 在执行就可以看出差别.修改等级后,更新操作必须等到第一个事务提交后才可执行

        4.serializeable(可串行的)

      •    语句不能读取已由其他事务修改但尚未提交的数据。

      •   任何其他事务都不能在当前事务完成之前修改由当前事务读取的数据。

      •   在当前事务完成之前,其他事务不能使用当前事务中任何语句读取的键值插入新行。

        

    隔离级别脏读不可重复读虚拟读取
    未提交的读取
    已提交的读取
    可重复的读取
    快照
    可序列化
  • 相关阅读:
    Loadrunner脚本自动关联和手动关联
    Linux常用命令大全
    linux软件的安装和卸载
    PL/SQL DEVELOPER执行计划的查看
    利用pl/sql执行计划评估SQL语句的性能简析
    LoadRunner监控Linux与Windows方法
    LR添加Windows和Linux压力机实战
    《JS设计模式笔记》 4,桥接模式
    《ES6基础教程》之 Call 方法和 Apply 方法
    《JS设计模式笔记》 3,观察者模式
  • 原文地址:https://www.cnblogs.com/student-note/p/12386862.html
Copyright © 2011-2022 走看看