兩個人同時操縱資料庫,怎麼處理併發問題?

時間 2021-05-29 22:49:56

1樓:

這個你可以說的更細一點

是兩個人同時在控制台處理還是兩個執行緒同時處理

當然這些你可以都忽略,資料庫會幫你幹這個事情,幫你處理好併發問題的

2樓:

哈哈,必須強答一波。因為很多年前我在大學時就被此問題困擾過。我當時已經把問題簡化為,兩個使用者同時更新同一條記錄,資料庫它怎麼辦?

其實,不是資料庫怎麼辦?核心是我們想怎麼處理,資料庫有多種機制供我們選擇。簡單的說,如果更新時有問題,資料庫可以直接報錯,我們的程式就會收到異常,提示更新失敗。

把你想到的技術上如何處理先放下,拋開技術層面,你把各種情況仔細想想。假設庫存只剩1件商品,兩個人如果有先後,第乙個人應該成功購買到商品,庫存變成0;第二個不應該讓他購買到商品,因為庫存已經是0,提示使用者庫存異常或者庫存不足即可。

從上面的思路展開,資料庫提供了鎖的機制,第乙個人更新資料庫的時候可以將記錄或者表鎖定,不讓其他人更新,那麼就算是同時操作的人也沒有辦法更新,需要等待鎖的釋放。當然資料庫還有很多選擇,即不同的事務控制型別,適用於不同的業務場景。

這裡只提到資料庫層面,你還可以在程式的層面進行處理。建議你先搞明白資料庫層面的處理,很多其他解決方法,就是因為資料庫記錄加鎖的方式不夠完美,影響效能等大家想出各種不同的解決手段,注意這些不同手段適用於不同業務場景。你先把資料庫層面搞明白再說。

3樓:程式設計師姜戈

先說客戶端,之所以支援多個客戶端連線到資料庫埠,涉及IO多路復用,當然在實際使用中,很多企業還會自己實現連線池,高效管理資料庫連線。

對於事務層面,有兩個併發控制手段,乙個加鎖,乙個不加鎖。加鎖的方式比如採用表鎖行鎖,事務1操作該行的時候事務2無法修改。不加鎖的方式,使用的是多版本控制技術,即MVCC,其實就是各個事務操作的日誌快照鍊錶。

4樓:零五

第一種:service層加執行緒鎖是最簡單的做法,但效能不佳第二種:利用時間戳,每張表加乙個update時間戳(比如update_time),讀取當前商品剩餘數量的時候把update時間戳(放入變數lastUpdateTime)讀出來,然後更新的時候where條件加上時間戳

update

表set

商品數量

=商品數量-1

,update_time

=當前時間

where

商品ID=id

andupdate_time

=lastUpdateTime

如果沒有更新到記錄,就表明這條記錄被其他執行緒更新了,就可以返回前台提示使用者。這是比較方便的做法。

第三種:利用redis或者zookeeper實現分布式鎖,這個有現成方案,就是需要額外的redis或者zookeeper的資源。

同時喜歡了兩個人怎麼辦?

從來就沒有同時喜歡上兩個人,只是乙個你喜歡,另乙個你有感情,可能是同情 可憐 不習慣,你誤以為是喜歡而已。放過那個善良的男孩子吧,他能找到只喜歡乙個人的姑娘。 知知為不知 這兩個都不是你的菜,第乙個他不愛你,只要他的青梅竹馬分手了,你和他也就結束了。第二個你對他沒有感覺,感情的事不能勉強,要不就是對...

如果同時喜歡兩個人怎麼辦?

戴旭 曾經,我覺得,同時喜歡上兩個人都是鬼扯,而如今我正在面對這個問題!而我似乎能分的清,只是不知如何抉擇!我和我女朋友在一起兩年,說實話,我們兩個興趣愛好真的不一樣,兩年的日子很平淡,我對她很好很體貼,而她也很專一的陪我左右!我們的日子屬於安穩平淡!故事的轉折出現在12月份,公司來了乙個財務。比我...

同時喜歡兩個人正常嗎,怎麼理解同時喜歡物件和愛豆?

正常真的很正常 愛豆是你心中嚮往的樣子即使他也許是經過很多層包裝出來的完美但他也一定有閃閃發亮的點無比吸引你 愛豆是有距離的而你喜歡的人就在身邊兩個人都很優秀所以同時被兩個人吸引也不算奇怪 我就是這樣的現在在努力像我喜歡的他們一樣努力變更好每天都過的挺充實的所以感覺生活也挺美好的嘛嘻嘻嘻 怎麼就不正...