2)共享锁   
  在第一个连接中执行以下语句   
  begin   tran   
        select   *   from   table1   with(holdlock)   --holdlock人为加锁   
        where   B='b2'     
        waitfor   delay   '00:00:30'     --等待30秒   
  commit   tran   
    
  在第二个连接中执行以下语句   
  begin   tran   
        select   A,C   from   table1   
        where   B='b2'     
        update   table1   
        set   A='aa'   
        where   B='b2'         
  commit   tran   
    
  若同时执行上述两个语句,则第二个连接中的select查询可以执行   
  而update必须等待第一个事务释放共享锁转为排它锁后才能执行   即要等待30秒   
----------------------------------------------------------------------------------------------问题1: 当第一个连接事务结束后,共享锁应该也被释放掉了,是吗?问题2:而update必须等待第一个事务释放共享锁转为排它锁后才能执行   即要等待30秒   ?这个"释放共享锁转为排它锁后才能执行"不是很明白..第一个事务中也没有更新语句。怎么会有排它锁。。菜鸟问题。知道的朋友说下。谢谢~~~

解决方案 »

  1.   

    1、默认的事务隔离级别为read committed,当select执行完毕后,会释放该共享锁。
    2、释放共享锁转为排它锁后才能执行
       --》》共享锁是第一个事务加的,排它锁是第二个事务要加的。但是两个是不能并存的,所以必须要等到第一个锁释放后,才能加排它锁
      

  2.   

    holdlock 相当于serializable,差别在于它仅对你当前表有作用。