有個問題困惑了好久,關於mysql表的設計

來源:互聯網
上載者:User
我現在有個業務需要,就是賬戶餘額的問題,怎麼去設計這個賬戶餘額的表呢?
簡單的update更新喻額顯然是行不通的
如果使用者在pc端,移動端操作餘額,很有可能發生錯誤
難道必須用事務嗎?

回複內容:

我現在有個業務需要,就是賬戶餘額的問題,怎麼去設計這個賬戶餘額的表呢?
簡單的update更新喻額顯然是行不通的
如果使用者在pc端,移動端操作餘額,很有可能發生錯誤
難道必須用事務嗎?

事務並不是必須的,但是事務是最簡單、最清晰、最方便的實現方法。你可以通過其他一些狀態轉換來實現對餘額操作的正確性,不過整個狀態轉換相當複雜,比較麻煩,而且即使你弄出來這套狀態轉換流程,其實你無非就是自己做了個事務系統。

這個跟事務沒啥關係吧,你說的應該是鎖吧。其實
你要解決的問題只有一個:同步安全問題,解決方案兩種:

1.使用資料庫提供的鎖
每次對餘額進行操作之前先對餘額進行加鎖(行鎖,for update),然後就可以隨意操作了,記得最後提交事務即可(會自動釋放鎖,注意MySQL不要開啟自動認可事務)

2.應用程式自己提供鎖
如果不管是PC端還是移動端對餘額的操作都走同一個介面,那麼直接在該介面中使用分離鎖(針對每個使用者一個鎖)對需要進行餘額操作的請求進行加鎖即可。
如果走的不是同一個介面,那麼就需要分布式鎖了,redis有一個方案可提供分布式鎖,可以參考Redis官方給出的一個方案:用Redis構建分布式鎖

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.