Oracle中forupdate的⽤法
语法:
<pre>
SELECT ......FOR UPDATE [ OF column_list ] [ WAIT n ] [ SKIP LOCKED ];
</pre>其中OF字句⽤于指定即将更新的列,即锁定⾏上的特定列;WAIT⼦句指定等待其他⽤户释放锁的秒数,防⽌⽆限期的等待。使⽤“FOR U PDATE WAIT”⼦句的优点如下:
1、防⽌⽆限期地等待被锁定的⾏;
2、允许应⽤程序中对锁的等待时间进⾏更多的控制。
3、对于交互式应⽤程序⾮常有⽤,因为这些⽤户不能等待不确定
4、若使⽤了skip locked,则可以越过锁定的⾏,不会报告由wait n引发的‘资源忙’异常报告
举例:
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>
图20168983719.png
在窗⼝2中执⾏
<pre>select * from t where a='1' for update;</pre>
发现⽆法查询出结果且PLSQLDeveloper的执⾏按钮⼀直为灰⾊。
这是因为表被窗⼝1⾥的语句锁住了,窗⼝2处于等待状态。
只有等窗⼝1中提交了事务之后才能在窗⼝2中正常执⾏上述语句。
在窗⼝1中点击提交事务的按钮后,窗⼝2中⽴马显⽰出正常结果。
2)、
<pre>
select * from t for update;
select * from t for update nowait;
update语法大全select * from t for update wait 6;
</pre>
图20168984640.png
图20168985022.png
3)、
<pre>
select * from t where rownum<=3 for update skip locked;
select * from t where rownum<=6 for update skip locked;
</pre>
图20168985641.png 可见前三条数据因被窗⼝1锁住⽽没有查出来。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。