Oracle中for update的用法

语法:

<pre>
SELECT ......FOR UPDATE [ OF column_list ] [ WAIT n ] [ SKIP LOCKED ];
</pre>其中OF字句用于指定即将更新的列,即锁定行上的特定列;WAIT子句指定等待其他用户释放锁的秒数,防止无限期的等待。

使用“FORUPDATE 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;
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锁住而没有查出来。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、文本框为字符型 必填项非空校验: 1、必填项未输入--程序应提示错误; 2、必填项只输入若干个空格,未输入其它...
    许小小晴阅读 4,658评论 0 2
  • 《裕语言》速成开发手册3.0 官方用户交流:iApp开发交流(1) 239547050iApp开发交流(2) 10...
    叶染柒丶阅读 27,776评论 5 19
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,242评论 25 708
  • 林院长及导师,嘉宾音频,恭祝爱·自然·生命力公益基金启动【请点击蓝色文字打开链接收听】 爱·自然·生命力公益基金捐...
    虹丞阅读 1,362评论 0 0
  • 周六跟哥们几个 去人民体育场踢球 上次来大概还是初三时候吧 笑着说 你我已不是当年的你我了 当然 所谓的 初心 还...
    拧发条的鸟阅读 288评论 0 0