关于Oracle的一些积累

在同一个session上,为了保持数据一致性,若表中有行锁,

select * from t for update 会等待行锁释放之后,返回查询结果。
select * from t for update nowait 不等待行锁释放,提示锁冲突,不返回结果
select * from t for update wait 5  等待5秒,若行锁仍未释放,则提示锁冲突,不返回结果
select * from t for update skip locked 查询返回查询结果,但忽略有行锁的记录

由上述比较看来, nowait 不返回记录,而返回冲突信息; skip locked 返回查询结果,并忽略行锁记录

在Oracle 9i, 10g中, select * from t for update nowait skip locked;   这样的查询,既要求提示冲突不返回记录,又要求忽略行锁记录返回查询结果;执行结果与
select * from t for update skip locked 一致, nowait的作用实际上被屏蔽了。

我们可以认为上述语句是Oracle查询编译语句的bug,但无伤大雅。但我们知道, nowait 与 skip locked 在语义上应该是互斥的。

在Oracle 11g中,select * from t for update nowait skip locked是错误的,用户必须显示指定是nowait 还是 skip locked, 而不能同时提供两者,让查询编译器来决定到底是哪个。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值