sql鎖機制大全

2021-05-17 13:04:15 字數 2013 閱讀 9349

3) 設定事務隔離級別。

4 ) 對 select、insert、update 和 delete 語句使用表級鎖定提示。

5) 配置索引的鎖定粒度

可以使用 sp_indexoption 系統儲存過程來設定用於索引的鎖定粒度

六 檢視鎖的資訊   1 執行 exec sp_lock 報告有關鎖的資訊

2 查詢分析器中按ctrl+2可以看到鎖的資訊

七 使用注意事項

如何避免死鎖

1 使用事務時,盡量縮短事務的邏輯處理過程,及早提交或回滾事務;

2 設定死鎖超時引數為合理範圍,如:3分鐘-10分種;超過時間,自動放棄本次操作,避免程序懸掛;

3 優化程式,檢查並避免死鎖現象出現;

4 .對所有的指令碼和sp都要仔細測試,在正是版本之前。

5 所有的sp都要有錯誤處理(通過@error)

6 一般不要修改sql server事務的預設級別。不推薦強行加鎖 

八 幾個有關鎖的問題

1 如何鎖乙個表的某一行

set transaction isolation level read uncommittedselect * from table rowlock where id =

1 2 鎖定資料庫的乙個表

select * from table with (holdlock)

加鎖語句:

sybase:update 表 set col1=col1 where 1=0 ;ms sql:select col1 from 表 (tablockx) where 1=0 ;oracle:lock table 表 in exclusive mode ;

加鎖後其它人不可操作,直到加鎖使用者解鎖,用commit或rollback解鎖

幾個例子幫助大家加深印象,設table1(a,b,c)

a  b c

a1 b1 c1

a2  b2 c2

a3  b3 c3

1)排它鎖

新建兩個連線,在第乙個連線中執行以下語句

begin tranupdate table1set a='aa'where b='b2'waitfor delay '00:00:30'

--等待30秒commit tran

在第二個連線中執行以下語句

begin transelect * from table1where b='b2'commit tran

若同時執行上述兩個語句,則select查詢必須等待update執行完畢才能執行即要等待30秒

2)共享鎖

在第乙個連線中執行以下語句

begin transelect * from table1 holdlock -holdlock人為加鎖where b='b2'waitfor delay '00:00:30'

--等待30秒commit tran

在第二個連線中執行以下語句

begin transelect a,c from table1where b='b2'update table1set a='aa'where b='b2'commit tran

若同時執行上述兩個語句,則第二個連線中的select查詢可以執行,而update必須等待第乙個事務釋放共享鎖轉為排它鎖後才能執行 即要等待30秒

3)死鎖

增設table2(d,e)

d e

d1  e1

d2 e2

在第乙個連線中執行以下語句

begin tranupdate table1set a='aa'where b='b2'waitfor delay '00:00:30'update table2set d='d5'where e='e1'commit tran

在第二個連線中執行以下語句

begin tranupdate table2set d='d5'where e='e1'waitfor delay '00:00:10'update table1set a='aa'where b='b2'commit tran

SQL的鎖機制

其實所有的死鎖最深層的原因就是乙個 資源競爭。表現一 乙個使用者a 訪問表a 鎖住了表a 然後又訪問表b,另乙個使用者b 訪問表b 鎖住了表b 然後企圖訪問表a。這時使用者a由於使用者b已經鎖住表b,它必須等待使用者b釋放表b,才能繼續,好了他老人家就只好老老實實在這等了。同樣使用者b要等使用者a釋...

python鎖機制 python 鎖機制

當有兩個或跟多個執行緒或程序需要操作乙個變數或程序時,會出現意想不到的結果,這是因為執行緒或程序時迸發進行的,對同意變數或檔案操作時,會出現同時對其操作,從到導致邏輯錯誤。bin usr env python coding utf 8 import multiprocessing import ti...

mysql鎖機制 php Mysql鎖機制

表級鎖 開銷小,加鎖快 不會出現死鎖 鎖定粒度大,發生鎖衝突的概率最高,併發度最低。行級鎖 開銷大,加鎖慢 會出現死鎖 鎖定粒度最小,發生鎖衝突的概率最低,併發度也最高。共享鎖和排它鎖 頁面鎖 開銷和加鎖時間界於表鎖和行鎖之間 會出現死鎖 鎖定粒度界於表鎖和行鎖之間,併發度一般 mysql的行級鎖有...