FOR UPDATE NOWAIT和 FOR UPDATE

tolywang發表於2010-08-08
通常是透過select … from for update語句新增的,同時該方法也是我們用來手工鎖定某些記錄的主要方法。比如,當我們在查詢某些記錄的過程中,不希望其他使用者對查詢的記錄進行更新操作,則可以發出這樣的語句。當資料使用完畢以後,直接發出rollback命令將鎖定解除。當表上新增了RS鎖定以後,不允許其他事務對相同的表新增排他鎖,但是允許其他的事務透過DML語句或lock命令鎖定相同表裡的其他資料行。

 

FOR UPDATE NOWAIT和 FOR UPDATE的區別
別的事務要對這個表進行寫操作時,是等待一段時間還是馬上就被資料庫系統拒絕而返回.制定採用NOWAIT方式來進行檢索,所以當發現資料被別的SESSION鎖定中的時候,就會迅速返回ORA-00054錯誤,內容是資源正忙, 但指定以 NOWAIT 方式獲取資源。所以在程式中我們可以採用NOWAIT方式迅速判斷當前資料是否被鎖定中,如果鎖定中的話,就要採取相應的業務措施進行處理。
如:當先(1)SELECT * FROM TABLEA FOR UPDATE
然後再(2-1)SELECT * FROM TABLEA FOR UPDATE NOWAIT--直接返回錯誤;但是以(2-2)SELECT * FROM TABLEA FOR UPDATE執行會阻塞等待,直到(1)的提交或回滾掉

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-670539/,如需轉載,請註明出處,否則將追究法律責任。

相關文章