Oracle 之 for update 与for update skip locked

        在我们日常操作Oracle数据库的时候,我们经常会使用 select for update 来修改我们的查询结果,所以select for update语句是对select 查询结果加行锁。那么select for update skip locked 语句又有什么用呢?


       如果我们在session1中执行以下语句:

select * from user where userid=1 for update;

       输出:

userid        username
- - - - - - - - - - - - - - - -
  1            呵呵

         session2执行下面语句:

select * from user where userid in (1,2) for update;

        输出:

select * from user where userid in (1,2) for update;

ORA-000054:resource busy and acquire with NOWAIT specified

        因为我们在sessio1中已经将userid=1的行锁住了,然后在session2的请求获取不到userid=1的锁,所以就会报错!


        如果我们在session2中使用skip locked:

select * from user where userid in (1,2) for update skip locked;


        输出:

userid        username
- - - - - - - - - - - - - - - 
   2            哈哈


        通过上面的分析,select for update skip locked 就是在尝试加锁之前判断记录是否已经被其他用户锁定,如果已经锁定,这跳过该已锁订记录,如果没有被锁定,就锁定该没有被锁定的记录。





评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值