SQL Server中“加鎖選項”的功能說明

iSQlServer發表於2010-02-25
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   將在整個表上置排它鎖直至該命令或事務結束。這將防止其他程式讀取或修改表中的資料。  

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-627815/,如需轉載,請註明出處,否則將追究法律責任。

相關文章