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的行級鎖有...