for update

项目中涉及到oracle的并发操作,我在更新账户变动表的时候有可能其他用户也在update这个时候可能会产生并发的问题。使用oracle的for update语句,他是一个行级锁,在其进行操作的时候,当前行记录被锁。

select t.balance as balance from sys_shop_account t where t.shopid =1001 for update
 

 

1:FOR UPDATE WAIT 5

   5秒后会提示ORA-30006: resource busy; acquire with WAIT timeout expired

 

2:FOR UPDATE NOWAIT SKIP LOCKED;

   提示no rows selected

 

3:TABLE LOCKS LOCK TABLE table(s) IN EXCLUSIVE MODE [NOWAIT];

    同样也是在transaction结束时才会释放lock。

 

4:DEADLOCK transaction a lock rowA , then transaction b lock rowB then transaction a tries to lock rowB, and transaction b tries to lock rowA

     两个transaction都相互试图去lock对方已经lock的ROW,都在等待对方释放自己的lock,这样就使死锁。 deadlock也会有600提示。

你可能感兴趣的:(oracle)