1. 程式人生 > >資料庫鎖機制 很詳細的教程,易懂

資料庫鎖機制 很詳細的教程,易懂

1) holdlock 對錶加共享鎖,且事物不完成,共享鎖不釋放。
2) tablock  對錶加共享鎖,只要statement不完成,共享鎖不釋放。
   與holdlock區別,見下例:
   例21
   ----------------------------------------
   T1:
   begin tran
   select * from table (tablock)
   T2:
   begin tran
   update table set column1='hello' where id = 10

   T1執行完select,就會釋放共享鎖,然後T2就可以執行update. 此之謂tablock. 下面我們看holdlock
   例22
   ----------------------------------------
   T1:
   begin tran
   select * from table (holdlock)
   T2:
   begin tran
   update table set column1='hello' where id = 10
   
   T1執行完select,共享鎖仍然不會釋放,仍然會被hold(持有),T2也因此必須等待而不能update. 當T1最後執行了commit或
   rollback說明這一個事物結束了,T2才取得執行權。
  
3) TABLOCKX 對錶加排他鎖
  
   例23:
   ----------------------------------------
   T1:    select * from table(tablockx) (強行加排他鎖)
   其它session就無法對這個表進行讀和更新了,除非T1執行完了,就會自動釋放排他鎖。
   例24:
   ----------------------------------------
   T1:    begin tran
          select * from table(tablockx)
   這次,單單select執行完還不行,必須整個事物完成(執行了commit或rollback後)才會釋放排他鎖。
  
4) xlock 加排他鎖
   那它跟tablockx有何區別呢?

   它可以這樣用,
   例25:
   ----------------------------------------
   select * from table(xlock paglock) 對page加排他鎖
   而TABLELOCX不能這麼用。

   xlock還可這麼用:select * from table(xlock tablock) 效果等同於select * from table(tablockx)