Oracle中避免排隊(duì)的唯一方式是使用SELECT ... FOR UPDATE(子句WAIT/NOWAIT)命令。
oracle鎖的排隊(duì)機(jī)制:
請(qǐng)求鎖定需要排隊(duì)。如果某個(gè)會(huì)話請(qǐng)求一個(gè)鎖定,但是由于其他會(huì)話已經(jīng)鎖定了指定記錄或?qū)ο蠖鵁o(wú)法獲得所需的鎖定,那么這個(gè)會(huì)話將會(huì)等待。
此時(shí),可能多個(gè)會(huì)話都在等待訪問(wèn)相同記錄或?qū)ο螅谶@種情況下,ORACLE會(huì)跟蹤這些會(huì)話請(qǐng)求鎖定的順序。
如果不希望某個(gè)會(huì)話在無(wú)法獲得鎖定時(shí)進(jìn)行排隊(duì)等候,那么避免排隊(duì)的唯一方式是使用SELECT ... FOR UPDATE(子句WAIT/NOWAIT)命令。
SELECT ... FOR UPDATE命令會(huì)采用專用的模式來(lái)選擇和鎖定記錄。
如果某條記錄已被鎖定,那么在鎖定被釋放前,SELECT ... FOR UPDATE語(yǔ)句會(huì)像DML語(yǔ)句一樣進(jìn)行排隊(duì)并掛起會(huì)話。
使用子句N(xiāo)OWAIT或WAIT
在SQL SERVER數(shù)據(jù)庫(kù)中有update table with(NOLOCK,UPLOCK,ROWLOCK) set 字段 = 值 where ……(沒(méi)有安裝sql server,未經(jīng)測(cè)試)
NOLOCK:NOLOCK可以忽略鎖,直接從數(shù)據(jù)庫(kù)讀取數(shù)據(jù)。這意味著可以避開(kāi)鎖,從而提高性能和擴(kuò)展性。但同時(shí)也意味著代碼出錯(cuò)的可能性存在。
UPLOCK:讀取表時(shí)使用更新鎖,而不使用共
ROWLOCK:ROWLOCK告訴SQL Server只使用行級(jí)鎖。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注