UPDLOCK和READPAST,通過UPDLOCK和READPAST的結合我們能夠解決許多問題,比如我當前項目中對於更新預約人數,則用到了UPDLOCK和READPAST,因為考慮到並發如果固定預約人數為100,那么當出現並發時將有可能導致預約超出的情況,利用UPDLOCK則可以解決其他進程過來時對其進行修改的情況,同時結合READPAST解決臟讀,同時不會阻塞,當有請求過來時我們直接利用表變量對預約人數進行更新,若更新失敗我們再進行回滾,算是一個解決方案。同時利用UPDLOCK和READPAST還可以解決其他問題,比如,當有多個並發時我們要根據篩選條件獲取第一值,也就是說第二個請求過來時獲取到的值是下一個,那么這樣的問題該如何處理呢,若我們只是簡單進行處理,那么第二個請求同時過來時可能也會讀取到之前讀取的那個值,基於此場景,我們可以利用UPDLOCK和READPAST來解決。我們看如下代碼就可以理解。
UPDLOCK 讀取表時使用更新鎖,而不使用共享鎖,並將鎖一直保留到語句或事務的結束。UPDLOCK 的優點是允許您讀取數據(不阻塞其它事務)並在以后更新數據,同時確保自從上次讀取數據后數據沒有被更改。
READPAST 指定數據庫引擎不讀取由其他事務鎖定的行。 如果指定了 READPAST,將跳過行級鎖。