悲觀鎖定指的是對資料被外界修改持保守態度,就是在資料處理過程中,將資料處於鎖定狀態,該功能需要依靠資料庫提供的鎖定機制,否則即使在系統中實現了加鎖機制,也無法保證外部系統不會修改資料。
鎖定的模式
#LockMode.NONE
LockMode.READ
LockMode.WRITE
LockMode.UPGRADE
LockMode.UPGRADE_NOWAIT
鎖定的示範
注意:鎖定只對一次事務中操作的資料物件起作用,並不是對整個資料庫起作用而將整個資料庫鎖住。開啟兩個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 提交後才能修改成功。
推薦教學:《MySQL教學》
#
以上是悲觀鎖是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!