在软件中体悟人生 在人生中感悟软件

专注Web项目设计、实现和管理
  博客园  :: 首页  :: 联系 :: 订阅 订阅  :: 管理

SQL Server中“加锁选项”的功能说明

Posted on 2010-02-25 13:12  王景  阅读(438)  评论(0编辑  收藏  举报
1   如何锁一个表的某一行  
   
   
  A   连接中执行  
   
  SET   TRANSACTION   ISOLATION   LEVEL   REPEATABLE   READ  
   
  begin   tran  
   
  select   *   from   tablename   with   (rowlock)   where   id=3  
   
  waitfor   delay   '00:00:05'  
   
  commit   tran  
   
  B连接中如果执行  
   
  update   tablename   set   colname='10'   where   id=3   --则要等待5秒  
   
  update   tablename   set   colname='10'   where   id<>3   --可立即执行  
   
  2   锁定数据库的一个表  
   
  SELECT   *   FROM   table   WITH   (HOLDLOCK)    
   
   
  注意:   锁定数据库的一个表的区别  
   
  SELECT   *   FROM   table   WITH   (HOLDLOCK)    
  其他事务可以读取表,但不能更新删除  
   
  SELECT   *   FROM   table   WITH   (TABLOCKX)    
  其他事务不能读取表,更新和删除  
   
   
  SELECT   语句中“加锁选项”的功能说明  
      SQL   Server提供了强大而完备的锁机制来帮助实现数据库系统的并发性和高性能。用户既能使用SQL   Server的缺省设置也可以在select   语句中使用“加锁选项”来实现预期的效果。   本文介绍了SELECT语句中的各项“加锁选项”以及相应的功能说明。  
      功能说明:     
      NOLOCK(不加锁)    
      此选项被选中时,SQL   Server   在读取或修改数据时不加任何锁。   在这种情况下,用户有可能读取到未完成事务(Uncommited   Transaction)或回滚(Roll   Back)中的数据,   即所谓的“脏数据”。    
       
      HOLDLOCK(保持锁)    
      此选项被选中时,SQL   Server   会将此共享锁保持至整个事务结束,而不会在途中释放。    
       
      UPDLOCK(修改锁)    
      此选项被选中时,SQL   Server   在读取数据时使用修改锁来代替共享锁,并将此锁保持至整个事务或命令结束。使用此选项能够保证多个进程能同时读取数据但只有该进程能修改数据。    
       
      TABLOCK(表锁)    
      此选项被选中时,SQL   Server   将在整个表上置共享锁直至该命令结束。   这个选项保证其他进程只能读取而不能修改数据。    
       
      PAGLOCK(页锁)    
      此选项为默认选项,   当被选中时,SQL   Server   使用共享页锁。    
       
      TABLOCKX(排它表锁)    
      此选项被选中时,SQL   Server   将在整个表上置排它锁直至该命令或事务结束。这将防止其他进程读取或修改表中的数据。