Oracle給Select結果集加鎖,Skip Locked(跳過加鎖行獲得可以加鎖的結果集)


1、通過select for update或select for update wait或select for update nowait給數據集加鎖

具體實現參考select for update和select for update wait和select for update nowait的區別

2、Skip Locked(跳過加鎖行獲得可以加鎖的結果集)

Skip locked是oracle 11g引入的。

通過skip locked可以使select for update語句可以查詢出(排除已經被其他會話加鎖了的數據行)剩下的數據集,並給剩下的數據集,進行加鎖操作。

a、測試一、

代碼如下:新建一個SQL窗口1(相當於新建一個會話),執行

update test8 set price=6 where ID=1

但是不執行commit操作,此時,當前數據已經被加鎖了。

然后,在新建一個SQL窗口2(相當於新建一個會話),執行

select * from test8 for update skip locked

根據結果集,我們發現ID=1的數據行被排除了

 

b、測試二

新建SQL窗口1(相當於新建一個會話)代碼如下:執行如下語句

select * from test8 for update

此時,不進行commit操作,表中所有的數據行被加鎖。根據測試一的結果得出推論:如果使用skip locked的話將查詢不出任何結果

新建SQL窗口2(相當於新建一個會話)代碼如下:執行如下語句

select * from test8 for update skip locked

沒有查出任何結果集,ok,推論正確!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM