亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

什么是悲觀鎖

發布時間:2020-07-31 10:52:59 來源:億速云 閱讀:177 作者:Leah 欄目:互聯網科技

什么是悲觀鎖?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

悲觀鎖指的是對數據被外界修改持保守態度,就是在數據處理過程中,將數據處于鎖定狀態,該功能需要依靠數據庫提供的鎖機制,否則即使在系統中實現了加鎖機制,也無法保證外部系統不會修改數據。

鎖的模式

LockMode.NONE

無鎖機制

LockMode.READ

Hibernate在讀取記錄時自動獲取鎖

即共享鎖:(Shared lock, S 鎖),共享鎖又稱讀鎖。如果事務 T 獲得了數據對象 A 上的共享鎖(也就是說對 A 加上共享鎖),那么其他事務只能獲得 A 上的 共享鎖(S 鎖),而不能加排他鎖(X 鎖),直到 A 釋放所有的共享鎖。獲準共享鎖的事務只能讀數據,不能修改數據。

LockMode.WRITE

Hibernate在insert獲者update記錄時自動獲取鎖

即排他鎖:(Exclusive lock, X 鎖),排他鎖又稱寫鎖。如果事務 T 獲得了數據 A 上的排他鎖,那么 T 既可以讀又可以寫 A,但是在 T 釋放 A 上的 X 鎖之前,其他事務既不能獲得 A 上的共享鎖,也不能獲得 A 上的排他鎖。

LockMode.UPGRADE

如果數據庫系統支持悲觀鎖(如Oracle和MySQL),就執行select…for update語句(行級鎖住,其他事務不能對其進行update、insert和delete語句),如果數據庫不支持悲觀鎖(如Sybase),就執行普通的select語句。

LockMode.UPGRADE_NOWAIT

和LockMode.UPGRADE具有相同的功能。此外,對于Oracle數據庫執行select…for update nowait語句。”nowait”表示如果執行該select語句的事務不能立刻獲得悲觀鎖,那么不會等待其他事務釋放鎖,而是立刻拋出一個鎖定異常。

鎖的演示

注意:鎖只對一次事務中操作的數據對象起作用,并不是對整個數據庫起作用而將整個數據庫鎖住。

打開兩個SQL命令操作行界面,這兩個界面可以代表兩個事務 T1 和 T2。我們先在兩個界面中分別執行命令:start transaction;

在事務 T1 中在數據庫中查詢學號為 “2015” 的學生信息并對操作的數據加上悲觀鎖:select * from stu_info where stu_no=”2015” for update;。此時我們能查詢到對應的信息。

“for update” 就表示加上悲觀鎖。此次查詢完并不提交事務,也就是說還未釋放鎖

在事務 T2 中在數據庫中查詢學號為 “2016” 的學生信息并對操作的數據加上悲觀鎖:select * from stu_info where stu_no=”2016” for update;。此時我們也能查詢到對應的信息。

尚不提交事務

在事務 T2 中在數據庫中查詢學號為 “2015” 的學生信息,此次做普通的 select 查詢,不加鎖:select * from stu_info where stu_no=”2015”;。此時我們也能查詢到對應的信息。

尚不提交事務

在事務 T2 中嘗試查詢數據庫中學號為 “2015” 的學生信息并對操作的數據加上悲觀鎖:select * from stu_info where stu_no=”2015” for update;。此時我們能發現,并未顯示相關的信息,而是在等待中。當我們提交事務 T1 時(即:commit),數據對象 “2015” 釋放 T1 中的悲觀鎖,T2 事務才能查詢到相關的信息并獲取到悲觀鎖。

如果我們換一下步驟5。在剛才的第五步中,我們在事務 T1 中修改學號為 “2016”學生信息但是不加悲觀鎖,因為此前我們在 事務 T2 中對該記錄加了悲觀鎖還未釋放,所以,只有等 T2 提交后才能修改成功。


關于什么是悲觀鎖問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宜兰县| 盐亭县| 那曲县| 阿鲁科尔沁旗| 巴南区| 绥芬河市| 理塘县| 开化县| 平顶山市| 弥渡县| 拜泉县| 馆陶县| 铜川市| 永吉县| 集贤县| 天全县| 正镶白旗| 神农架林区| 多伦县| 龙州县| 客服| 孟村| 汝南县| 盐津县| 凤翔县| 萨迦县| 资阳市| 乐业县| 阳江市| 博白县| 河源市| 武夷山市| 宜城市| 比如县| 彭州市| 布拖县| 孟州市| 定远县| 新平| 陇川县| 望江县|