多用戶同時操做一條Mysql記錄問題

場景:兩個用戶同時讀取了數據庫中的一條記錄,此時用戶A對其中一個字段的值進行了修改操做並進行了提交,後來用戶B也對這個字段進行了修改,用戶B的提交將會覆蓋用戶A提交的值html

 

關於樂觀鎖悲觀鎖java

悲觀鎖:每次去取數據,很悲觀,都以爲會被別人修改,因此在拿數據的時候都會上鎖。sql

簡言之,共享資源每次都只給一個線程使用,其餘線程阻塞,等第一個線程用完後再把資源轉讓給其餘線程。數據庫

synchronized和ReentranLock等都是悲觀鎖思想的體現。 segmentfault

樂觀鎖:每次去取數據,都很樂觀,以爲不會被被人修改。bash

所以每次都不上鎖,可是在更新的時候,就會看別人有沒有在這期間去更新這個數據,若是有更新就從新獲取,再進行判斷,一直循環,直到拿到沒有被修改過的數據。併發

CAS(Compare and Swap 比較並交換)就是樂觀鎖的一種實現方式,好比使用version字段或者修改時間字段來判斷數據是都被修改spa

 

參考線程

Mysql 事務及數據的一致性處理htm

https://segmentfault.com/a/1190000012469586

 CAS樂觀鎖解決併發問題的一次實踐

https://www.javazhiyin.com/41189.html

樂觀鎖與悲觀鎖——解決併發問題

https://www.cnblogs.com/0201zcr/p/4782283.html
相關文章
相關標籤/搜索