SQL的鎖機制

2021-04-12 16:22:37 字數 752 閱讀 3430

其實所有的死鎖最深層的原因就是乙個:資源競爭。

表現一:

乙個使用者a 訪問表a(鎖住了表a),然後又訪問表b,另乙個使用者b 訪問表b(鎖住了表b),然後企圖訪問表a。這時使用者a由於使用者b已經鎖住表b,它必須等待使用者b釋放表b,才能繼續,好了他老人家就只好老老實實在這等了。

同樣使用者b要等使用者a釋放表a才能繼續這就死鎖了。

解決方法:

這種死鎖是由於你的程式的bug產生的,除了調整你的程式的邏輯別無他法。

仔細分析你程式的邏輯:

1:盡量避免同時鎖定兩個資源;

2: 必須同時鎖定兩個資源時,要保證在任何時刻都應該按照相同的順序來鎖定資源。

表現二:

使用者a讀一條紀錄,然後修改該條紀錄,這是使用者b修改該條紀錄,這裡使用者a的事務裡鎖的性質由共享鎖企圖上公升到獨佔鎖(for update),而使用者b裡的獨佔鎖由於a有共享鎖存在所以必須等a釋放掉共享鎖,而a由於b的獨佔鎖而無法上公升的獨佔鎖也就不可能釋放共享鎖,於是出現了死鎖。

這種死鎖比較隱蔽,但其實在稍大點的專案中經常發生。

解決方法:

讓使用者a的事務(即先讀後寫型別的操作),在select 時就是用update lock

語法如下:

select * from table1 with(updlock) where ....

http://database.ccidnet.com/art/1106/20061121/956591_1.html   原位址

sql鎖機制大全

3 設定事務隔離級別。4 對 select insert update 和 delete 語句使用表級鎖定提示。5 配置索引的鎖定粒度 可以使用 sp indexoption 系統儲存過程來設定用於索引的鎖定粒度 六 檢視鎖的資訊 1 執行 exec sp lock 報告有關鎖的資訊 2 查詢分析器...

python鎖機制 python的鎖機制

鎖 lock lock 指令鎖 是可用的最低階的同步指令。lock處於鎖定狀態時,不被特定的執行緒擁有。lock包含兩種狀態 鎖定和非鎖定,以及兩個基本的方法。可以認為lock有乙個鎖定池,當執行緒請求鎖定時,將執行緒至於池中,直到獲得鎖定後出池。池中的執行緒處於狀態圖中的同步阻塞狀態。構造方法 l...

python鎖機制 python 鎖機制

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