SqlServer中的更新鎖(UPDLOCK和READPAST)

      UPDLOCK和READPAST,經過UPDLOCK和READPAST的結合咱們可以解決許多問題,好比我當前項目中對於更新預定人數,則用到了UPDLOCK和READPAST,由於考慮到併發若是固定預定人數爲100,那麼當出現併發時將有可能致使預定超出的狀況,利用UPDLOCK則能夠解決其餘進程過來時對其進行修改的狀況,同時結合READPAST解決髒讀,同時不會阻塞,當有請求過來時咱們直接利用表變量對預定人數進行更新,若更新失敗咱們再進行回滾,算是一個解決方案。同時利用UPDLOCK和READPAST還能夠解決其餘問題,好比,當有多個併發時咱們要根據篩選條件獲取第一值,也就是說第二個請求過來時獲取到的值是下一個,那麼這樣的問題該如何處理呢,若咱們只是簡單進行處理,那麼第二個請求同時過來時可能也會讀取到以前讀取的那個值,基於此場景,咱們能夠利用UPDLOCK和READPAST來解決。咱們看以下代碼就能夠理解。數據庫

       UPDLOCK  讀取表時使用更新鎖,而不使用共享鎖,並將鎖一直保留到語句或事務的結束。UPDLOCK 的優勢是容許您讀取數據(不阻塞其它事務)並在之後更新數據,同時確保自從上次讀取數據後數據沒有被更改。併發

       READPAST     指定數據庫引擎不讀取由其餘事務鎖定的行。 若是指定了 READPAST,將跳過行級鎖。spa

相關文章
相關標籤/搜索