關於資料併發

2021-07-31 02:59:14 字數 580 閱讀 6458

當多個使用者同時更新同一資料的時候,由於更新可能導致資料的不一致性,使得程式的業務資料發生錯誤,這種情況可以稱之為併發。在ado .net中,併發的處理可以通過三種方式來控制:保守式併發控制、開發式併發控制以及最後更新生效方式。 

注意:資料庫的併發處理並不是一成不變的,不同的業務場景對資料庫的併發要求是不一樣的,可以根據具體情況具體分析

我的問題是,在購物的場景中,購買了乙個商品,庫存自然會減少。當有多個使用者同時對此商品進行操作的時候,怎麼解決資料的完整性,比如說庫存為1,可是有10個人去購買,當然是第乙個可以購買,其他的都會因為庫存不足而導致操作失敗。怎麼做?

有的人說用佇列……

我用事務,淺淺地只知道事務可以保持資料完整性。可能事務屬於「保守式併發控制」,更新的時候不檢查是否和資料庫資料一致,直接更新。

測試了一下。發現事務在update、delete、insert的時候,會鎖定該錶,直至commit才釋放。鎖定期間不能對該錶執行任何操作,訪問也不行。

在select的時候則不會鎖定。

——真的不知道啊,只能先用事務了,可能高併發的時候會出現一些錯誤吧。

天啊,一想到這種問題,自己就想滾出程式設計圈,做個機智的少年。

如何應對併發 關於資料索引

select from iparea where ip between ipstart and ipend 在早期mysql及大部分資料庫是不支援between and 中使用索引的,據說最新版本已經提供了支援,但是最近幾年沒有從事技術,沒有測試,不知道效率如何,那麼在早期,如果資料查詢,這樣一條s...

關於併發的問題

實際專案開發中遇到這樣的乙個問題,主表的讀取和副表的讀取,前者為表更新之前的結果,後者為表更新之後的結果。由此懷疑mysql事務提交之後表更新不是按照表的語句前後順序執行,而是按照mysql的自身的優化機制 並無實證 來決定語句先後的,但是事務未執行完畢之前對外部是不可見,要不就回出現髒讀,所以上述...

關於驅動中的併發

核心程式設計中,我們不能使用使用者態的c庫函式的printf 函式輸出資訊,而只能使用printk 每個printk都 有個優先順序,核心一共有8個優先順序,預設default message loglevel,如果優先順序數字比int console loglevel變數小的話,訊息就會列印到控制...