資料庫是如何使用鎖

2021-09-19 09:41:25 字數 674 閱讀 4399

資料取得時候,把整個資料都copy到應用中,提交的時候比對當前資料庫中的資料和開始的時候取得的資料,如果兩個資料一模一樣,就表示沒有衝突可以提交,否則是併發衝突,則需要業務邏輯解決

版本戳,在樂觀鎖的資料庫table上建立乙個新的column,型別為number,資料每次更新一次的時候,版本數就會加1.如果有2個session同樣的對某條資料進行操作,兩者都取得的版本號為1,當第乙個session進行資料更新後,在提交的時候檢視到當前的資料庫版本還是為1,和一開始取得的版本相同,則提交,第二個session也更新了資料提交,發現資料庫版本為2,和一開始取得的版本號為1不一致,則知道別人已經更新過此條記錄,這個時候再進行業務處理,比如整個transaction都rollback,在驗證版本戳的時候,可以用應用程式或者trigger(開銷比較大)

和2類似,只不過是比較時間戳

事務a取得資料列1的共享鎖定

事務b取得資料列2的共享鎖定

事務a現在要求資料列2的獨佔鎖定,但會被阻塞到事務b完成並且釋放出資料列2的共享鎖定為止

事務b現在要求資料列1的獨佔鎖定,單會被阻塞到事務a完成並且釋放出資料列1的共享鎖定為止

等到事務b完成後,事務a才能完成,但是事務b又被事務a封閉了,這種情況叫迴圈相依性,事務a相依於事務b,並且事務b相依於事務b,從而封閉了這個迴圈

innodb解決死鎖的方式是讓最少x鎖的事務回滾。

資料庫 鎖的使用

表級鎖 分類一 讀鎖 lock table student read 讀鎖 可執行 select from student 等待解鎖 當前不能執行insert,update,delete操作 unlock tables 解鎖 解鎖後才可以執行insert 操作,update,delete 當我們執行...

如何解資料庫鎖

一些誤操作可能會造成資料被鎖,可以嘗試用下邊的指令碼來解鎖 指令碼可行,已經試用多次 column sid format 9999999 heading sess id column serial format 9999999 heading serial column object name fo...

如何解資料庫鎖

一些誤操作可能會造成資料被鎖,可以嘗試用下邊的指令碼來解鎖 指令碼可行,已經試用多次 column sid format 9999999 heading sess id column serial format 9999999 heading serial column object name fo...