語法:
<pre>
SELECT ......FOR UPDATE [ OF column_list ] [ WAIT n ] [ SKIP LOCKED ];
</pre>其中OF字句用于指定即將更新的列,即鎖定行上的特定列淹办;WAIT子句指定等待其他用戶釋放鎖的秒數(shù),防止無限期的等待。
使用“FORUPDATE WAIT”子句的優(yōu)點如下:
1傍菇、防止無限期地等待被鎖定的行将鸵;
2、允許應(yīng)用程序中對鎖的等待時間進(jìn)行更多的控制铆农。
3牺氨、對于交互式應(yīng)用程序非常有用,因為這些用戶不能等待不確定
4、若使用了skip locked猴凹,則可以越過鎖定的行夷狰,不會報告由wait n引發(fā)的‘資源忙’異常報告
舉例:
1)、
<pre>
create table t(a varchar(20) ,b varchar(20));
select * from t;
insert into t values (1,1);
insert into t values (2,3);
insert into t values (3,3);
insert into t values (4,4);
insert into t values (5,5);
insert into t values (6,6);
select * from t for update;
</pre>
在窗口2中執(zhí)行
<pre>select * from t where a='1' for update;</pre>
發(fā)現(xiàn)無法查詢出結(jié)果且PLSQLDeveloper的執(zhí)行按鈕一直為灰色郊霎。
這是因為表被窗口1里的語句鎖住了沼头,窗口2處于等待狀態(tài)。
只有等窗口1中提交了事務(wù)之后才能在窗口2中正常執(zhí)行上述語句歹篓。
在窗口1中點擊提交事務(wù)的按鈕后瘫证,窗口2中立馬顯示出正常結(jié)果。
2)庄撮、
<pre>
select * from t for update;
select * from t for update nowait;
select * from t for update wait 6;
</pre>
3)背捌、
<pre>
select * from t where rownum<=3 for update skip locked;
select * from t where rownum<=6 for update skip locked;
</pre>
可見前三條數(shù)據(jù)因被窗口1鎖住而沒有查出來。