select for update
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了select for update相关的知识,希望对你有一定的参考价值。
请问:
1、使用select ... where ... for update时,可以同时进行insert操作么?我尝试过好像可以。
2、使用select ... where ... for update,只有执行commit后,才能继续使用select ... where ... for update执行?如果同时有两条:select ... where ... for update,那肯定只有一条在执行,当commit后,另外一条才能继续执行?我尝试过好像可以
想再确认下,谢谢!
select ... for update不影响其它SQL的操作,除了另一条同样的select ... for update?
所以
1、可以
2、是的本回答被提问者和网友采纳
select * from salgrade for update和select * from salgrade for update nowait区别
1,select * from salgrade for update
session1 | session2 |
SQL> delete salgrade where grade=1; 1 row deleted. | |
SQL> select * from salgrade for update; 此时session2被阻塞 | |
SQL> rollback; Rollback complete. | |
GRADE LOSAL HISAL | |
SQL> delete salgrade where grade=1; session1被阻塞 | |
SQL> rollback; Rollback complete. | |
1 row deleted. session1获得资源,执行完毕 |
总结来看,select * from salgrade for update有以下特征:
①如果结果集已经被另一个会话锁定,就会发生阻塞。需要等另一个会话结束之后才可继续执行。
②它会对结果集加锁
2,select * from salgrade for update nowait
session1 | session2 |
1 row deleted. | |
SQL> select * from salgrade for update nowait; | |
SQL> rollback; Rollback complete. | |
SQL> select * from salgrade for update nowait; GRADE LOSAL HISAL | |
SQL> delete salgrade where grade=1; session1此时被阻塞 | |
SQL> rollback; Rollback complete. | |
1 row deleted. session1得到资源,执行完毕 |
总结来看,select * from salgrade for update nowait有以下特征:
①如果结果集已经被另一个会话锁定,会立即返回ORA-00054错误
②该语句本身同样也会对结果集加锁
综合总结,这两句语句的作用都是对结果集加排他锁,禁止其他会话做DML作业,如果希望在select期间,结果集不被修改,即可以选择这种方式。
以上是关于select for update的主要内容,如果未能解决你的问题,请参考以下文章