ORACLE FOR UPDATE与FOR UPDATE OF区别
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了ORACLE FOR UPDATE与FOR UPDATE OF区别,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2823字,纯文字阅读大概需要5分钟。
内容图文
![ORACLE FOR UPDATE与FOR UPDATE OF区别](/upload/InfoBanner/zyjiaocheng/482/ca516fad0c294d9eb9ca935dace38c0e.jpg)
2、SELECT * FROM EMP WHERE DEPTNO = 10 FOR UPDATE ; --只锁定DEPTNO = 10 的行
1 declare 2 cursor emp_cur 3 is 4 SELECT * FROM EMP WHERE DEPTNO = 10 FOR UPDATE ; --只锁定DEPTNO = 10 的行 5 begin 6 for x in emp_cur loop 7 update emp set sal = 9999 where current of emp_cur ; 8 end loop ; 9 end ;
3、SELECT * FROM EMP E , DEPT D WHERE E.DEPTNO = D.DEPTNO FOR UPDATE --锁定两个表的所有记录
4、SELECT * FROM EMP E , DEPT D WHERE E.DEPTNO = D.DEPTNO AND E.DEPTNO = 10 FOR UPDATE ; -- 锁定两个表中满足条件的行
5、SELECT * FROM EMP E , DEPT D WHERE E.DEPTNO = D.DEPTNO AND E.DEPTNO = 10 FOR UPDATE OF E.DEPTNO ; --只会锁定EMP表中满足条件的行
可以看出来FOR UPDATE是把所有的表都锁定,而FOR UPDATE OF 是根据OF后面的条件锁定相应的表
第一点:
对于单表操作而言,FOR UPDATE 和 FOR UPDATE OF 是一样的。不加条件是对全表的锁定,加了条件是对行级别的锁定。举个栗子:
1、不加WHERE条件是对全表进行锁定
SELECT * FROM EMP FOR UPDATE ; --对全表进行锁定
2、加上WHERE条件是对行级别的锁定
SELECT * FROM EMP WHERE DEPTNO = 10 FOR UPDATE ; --只对满足条件的10部门进行锁定
再次提醒FOR UPDATE 和 FOR UPDATE OF 对于单表操作是一样的。
那么FOR UPDATE 和 FOR UPDATE OF 的区别到底在哪呢?在进行多表查询时FOR UPDATE OF只锁定列所在的表进行锁定,而且是表级别的锁定,FOR UPDATE是对多个表进行锁定,不懂看例子:
1、SELECT * FROM EMP E ,DEPT D WHERE E.DEPTNO = D.DEPTNO AND E.DEPTNO = 10 FOR UPDATE OF E.DEPTNO ;
--只锁定E.DEPTNO所在的表并且只锁定DEPTNO = 10 的行
2、SELECT * FROM EMP E , DEPT D WHERE E.DEPTNO = D.DEPTNO AND E.DEPTNO = 10 FOR UPDATE ;
-- 锁定多个表
1 和 2 的区别在于 , 1只锁定表EMP 而 2 要锁定EMP表和DEPT表 ,这才是二者真正的区别。 即 FOR UPDATE 是把所有的表都锁上,而FOR UPDATE OF是根据相应的条件锁定相应的表
第二点:关于NOWAIT(如果一定要使用FOR UPDATE,更建议使用NOWAIT)
1、当有LOCK冲突时会提示错误并结束STATEMENT而不是在那里等待(比如:要查的行已经被其它事务锁了,当前的锁事务与之冲突,加上nowait,当前的事务会结束会提示错误并立即结束 STATEMENT而不再等待).
2、WAIT 子句指定等待其他用户释放锁的秒数,防止无限期的等待。
“使用FOR UPDATE WAIT”子句的优点如下:
1.防止无限期地等待被锁定的行;
2.允许应用程序中对锁的等待时间进行更多的控制。
3.对于交互式应用程序非常有用,因为这些用户不能等待不确定
4.若使用了skip locked,则可以越过锁定的行,不会报告由wait n 引发的‘资源忙’异常报告
ORACLE FOR UPDATE与FOR UPDATE OF区别
标签:结束 current ora code 根据 blog str 错误 strong
本文系统来源:http://www.cnblogs.com/zbj815/p/6844434.html
内容总结
以上是互联网集市为您收集整理的ORACLE FOR UPDATE与FOR UPDATE OF区别全部内容,希望文章能够帮你解决ORACLE FOR UPDATE与FOR UPDATE OF区别所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。