資料庫的四種隔離級別:髒讀、不可重複讀、可重複讀、序列化,雖然四種隔離級別能夠處理事務問題,但是不夠靈活,於是有了悲觀鎖和樂觀鎖。
悲觀鎖:對於外界的修改持保守態度,在整個資料處理中資料處於鎖定狀態。
以mysql為例,select……for update和lock in share model能夠實現悲觀鎖,這裡重點介紹select……for update。
1)當查詢的為主鍵或者有索引列,並且有值,則會進行row lock;
2)當查詢的為主鍵或者索引列,但是無該值,則不進行鎖定;
3)當查詢的非主鍵或者主鍵不明確時,並且有值,會進行table lock。
樂觀鎖:一般認為資料不會存在衝突,只有進行更新時才會去進行檢測,若衝突,則返回錯誤資訊。
常見的樂觀鎖有兩種:
1)增加版本號列,每次更新對比後,若可以進行更新則更新資料並修改版本號;
2)類似版本號,也增加一列,儲存時間戳
參考:資料庫的隔離級別以及悲觀鎖和樂觀鎖的區別:
資料庫的悲觀鎖和樂觀鎖
悲觀鎖就是對資料的衝突持悲觀態度,也就是假設資料肯定會發生衝突,所以在資料開始讀取的時候就把資料鎖定住。書籍表book,id為商品id 主鍵 isonline是否上線,1代表上線,0代表下線,那麼我們如果要對書籍進行下線,就需要將online置為0,假設id為1 如果不採用鎖 1 select fr...
資料庫悲觀鎖和樂觀鎖簡述
鎖 locking 業務邏輯的實現過程中,往往需要保證資料訪問的排他性。如在金融系統的日終結算 處理中,我們希望針對某個 cut off 時間點的資料進行處理,而不希望在結算進行過程中 可能是幾秒種,也可能是幾個小時 資料再發生變化。此時,我們就需要通過一些機 制來保證這些資料在某個操作過程中不會被...
資料悲觀鎖和樂觀鎖
業務邏輯的實現過程中,往往需要保證資料訪問的排他性。如在金融系統的日終結算處理中,我們希望針對某個 cut off 時間點的資料進行處理,而不希望在結算進行過程中 可能是幾秒種,也可能是幾個小時 資料再發生變化。此時我們就需要通過一些機制來保證這些資料在某個操作過程中不會被外界修改,這樣的機制在這裡...