Oracle中避免排隊的唯一方式是使用SELECT ... FOR UPDATE(子句WAIT/NOWAIT)命令。
oracle鎖的排隊機制:
請求鎖定需要排隊。如果某個會話請求一個鎖定,但是由於其他會話已經鎖定了指定記錄或對象而無法獲得所需的鎖定,那麼這個會話將會等待。
此時,可能多個會話都在等待訪問相同記錄或對象,在這種情況下,ORACLE會跟蹤這些會話請求鎖定的順序。
如果不希望某個會話在無法獲得鎖定時進行排隊等候,那麼避免排隊的唯一方式是使用SELECT ... FOR UPDATE(子句WAIT/NOWAIT)命令。
SELECT ... FOR UPDATE命令會采用專用的模式來選擇和鎖定記錄。
如果某條記錄已被鎖定,那麼在鎖定被釋放前,SELECT ... FOR UPDATE語句會像DML語句一樣進行排隊並掛起會話。
使用子句NOWAIT或WAIT
在SQL SERVER數據庫中有update table with(NOLOCK,UPLOCK,ROWLOCK) set 字段 = 值 where ……(沒有安裝sql server,未經測試)
NOLOCK:NOLOCK可以忽略鎖,直接從數據庫讀取數據。這意味著可以避開鎖,從而提高性能和擴展性。但同時也意味著代碼出錯的可能性存在。
UPLOCK:讀取表時使用更新鎖,而不使用共享鎖,並將鎖一直保留到語句或事務的結束。
ROWLOCK:ROWLOCK告訴SQL Server只使用行級鎖。