關於mysql事務行鎖for update實現寫鎖的功能



讀后感:用切面編程的理論來講,數據庫的鎖對於業務來說是透明的。spring的事務管理代碼,業務邏輯代碼,表鎖,應該是三個不同的設計層面。

在電子商務里,經常會出現庫存數量少,購買的人又特別多,大並發情況下如何確保商品數量不會被多次購買.

其實很簡單,利用事務+for update就可以解決.

我們都知道for update實際上是共享鎖,是可以被讀取的.但是如何在執行時,不被讀取呢.

簡單來說:假設現在庫存為1,現在有A和B同時購買

先開啟一個事務

begin;

select stock from good where id=1 for update;//查詢good表某個商品中stock的數量

查出來后,在程序里在判斷這個stock是否為0(你用什么語言,不關我事)

最后在執行

update good set stock=stock-1 where id=1

最后在

commit

但是這個時候B也是select stock from good where id=1 for update;注意:for update不能省略..這個時候會出現被鎖住,無法被讀取.


所以這就能夠保證了商品剩余數量為1的一致性


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM