資料庫鎖機制 很詳細的教程,易懂
阿新 • • 發佈:2019-01-05
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)