最近寫購物程序時當考慮到并發(fā)情況下避免出現(xiàn)超額購買的問題。想了下面如圖1這個流程當接到買入請求時更新庫存(操作方式如圖2)操作返回int i若為1則表示庫存足夠,可以購買。0則表示庫存不足。若更新庫存成功則開啟事務(wù)(允許用戶進行支付操作,這里會引用外部api,由于事務(wù)允許并發(fā),所以不會干擾性能,考慮到支付操作時是針對的單行記錄,其他線程不會對此事務(wù)造成干擾引起錯亂)問題1:現(xiàn)在不明白的是圖2中標注出的那一行,他的返回的原理是什么。內(nèi)部是否是原子性的實現(xiàn),若內(nèi)部實現(xiàn)采用的是類似row_count(),在并發(fā)情況下就會出現(xiàn)獲取返回條目與實際不符,導(dǎo)致判斷出錯。問題2:這種流程還會出現(xiàn)哪些嚴重的問題。-----------------------------------------分割線-----------------------------------------------雖然介紹說事務(wù)是原子性的,但并不是真正意義上一個事務(wù)執(zhí)行完才可以執(zhí)行另一個事務(wù)。遇到并發(fā)的情況下,多個事務(wù)對庫存的同時進行讀操作后再進行寫操作會造成錯誤。 所以在剛接到請求時更新庫存沒有用到事務(wù)。
mysql數(shù)據(jù)庫并發(fā)問題解決方案?
冷魘
2017-10-01 22:22:32