MySQL樂觀鎖和悲觀鎖介紹

chenfeng發表於2018-05-07
樂觀鎖
樂觀鎖不是資料庫自帶的,需要我們自己去實現。樂觀鎖是指運算元據庫時(更新操作),想法很樂觀,認為這次的操作不會導致衝突,在運算元據時,並不進行任何其他的特殊處理(也就是不加鎖),而在進行更新後,再去判斷是否有衝突了。

通常實現是這樣的:在表中的資料進行操作時(更新),先給資料表加一個版本(version)欄位,每操作一次,將那條記錄的版本號加1。也就是先查詢出那條記錄,獲取出version欄位,如果要對那條記錄進行操作(更新),則先判斷此刻version的值是否與剛剛查詢出來時的version的值相等,如果相等,則說明這段期間,沒有其他程式對其進行操作,則可以執行更新,將version欄位的值加1;如果更新時發現此刻的version值與剛剛獲取出來的version的值不相等,則說明這段期間已經有其他程式對其進行操作了,則不進行更新操作。


悲觀鎖
與樂觀鎖相對應的就是悲觀鎖了。悲觀鎖就是在運算元據時,認為此操作會出現資料衝突,所以在進行每次操作時都要透過獲取鎖才能進行對相同資料的操作,這點跟java中的synchronized很相似,所以悲觀鎖需要耗費較多的時間。另外與樂觀鎖相對應的,悲觀鎖是由資料庫自己實現了的,要用的時候,我們直接呼叫資料庫的相關語句就可以了。


說到這裡,由悲觀鎖涉及到的另外兩個鎖概念就出來了,它們就是共享鎖與排它鎖。共享鎖和排它鎖是悲觀鎖的不同的實現,它倆都屬於悲觀鎖的範疇。

總結:
樂觀鎖--程式端實現
悲觀鎖--資料庫自己實現

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15498/viewspace-2154113/,如需轉載,請註明出處,否則將追究法律責任。

相關文章