• SQL2005的锁定与交易隔离级别


    交易的隔离级别:当激活交易时,控制交易内因SQL语句产生的锁定有久,影响范围有多大。以防止多人访问时,在交易内发生数据查询的错误。设置的交易隔离级别将影响整条连接。

     

    SQLSERVER交易的隔离级别:读取未认可(Read Uncommitted)、读取认可(Read Committed)、可重复读取(Repeatable Read)、快照、可串行化

     

    设置语句:set transaction isolation level read committed

     

    读取未认可

     

    读取未认可为最低的交易隔离级别,查询时不放置共享锁就直接读取,所以,忽悠已存在的锁定。能加快查询速度,但会读到别人正在更新的数据。

     

    测试数据:

    新建一个连接,执行下面的sql语句,因为没有commit,rollback查询@@trancoun等于1,任有交易

    use Northwind

    go

    create table TransactionTest

    (

         id int,

         name varchar(50)

    )

     

    go

    insert into TransactionTest values(1,'liuyu')

    insert into TransactionTest values(2,'testname')

    go

    begin tran

    update TransactionTest set name='updated' where id=2

    select @@trancount

     

    再新建一个连接,执行下面sql语句,

    set transaction isolation level read uncommitted

    select * from TransactionTest where id=2

     

    查询结果

     

     

    读取认可

     

    读取认可是SQLSERER的默认隔离级别。当交易正在执行时读取数据时,数据库会设置共享锁防止其他交易修改数据。当读取完成时,自动释放共享锁定,其他交易就可修改数据。

    当未启用数据行控制版本时,会锁定整张表。数据行控制版本默认为关闭。开启的脚本如下

    alter database Northwind set READ_COMMITTED_SNAPSHOT on

    开启后,查询数据不会锁定,数据为交易前已认可的数据

     

     

    测试数据

    use Northwind

    go

    create table TransactionTest

    (

         id int,

         name varchar(50)

    )

     

    go

    insert into TransactionTest values(1,'liuyu')

    insert into TransactionTest values(2,'testname')

    go

    begin tran

    update TransactionTest set name='updated' where id=2

    select @@trancount

     

    再新建一个连接,执行下面sql语句,

    set transaction isolation level read committed

    select * from TransactionTest where id=2

    查询结果:查不出数据,因为锁定

     

  • 相关阅读:
    Java动态绑定和静态绑定-多态
    Java方法内联
    Java反射机制及原理
    Jvm-类加载机制
    Zookeeper 源码解析-环境准备
    SpringMvc源码解析
    Java虚拟机的意义
    起跑线
    js动态生成html,onclick事件失效解决方法
    虚拟机能ping通,但是telnet某个端口却不行
  • 原文地址:https://www.cnblogs.com/50614090/p/2985757.html
Copyright © 2020-2023  润新知