Oracle   发布时间:2022-05-17  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了oracle行锁 select for update大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
如果两个人同时查询到了一条数据,第二个的修改就会造成第一个人获取失效。为了避免这种情况的发生,我们使用了selectforupdate对获取到的行进行了加锁。下面简单介绍一下selectforupdate的使用方法。 先说明一下会用到的名词概念: statement:一个SQL语句。 session:一个由ORACLE用户产生的连接,一个用户能产生多个SESSION,但相互之间是独立的。 transaction:所有的改动都能划分到transaction里,一个transaction包含一个或多个sql。当一个SESSION建立的时候就是个TRANSACTION开始的时刻,此后transaction的开始和结束由DCL控制,也就是每个COMMIT/RolLBACK都标示着一个transaction的结束。 consistency:是对于statement级别而不是transaction级别来说的。sqlstatement得到的数据都是以sqlstatement开始的IMAGE。 用法介绍: update,insert,delete,select...forupdate会LOCK相应的ROW。 只有一个TRANSACTION可以LOCK相应的行,也就是说如果一个ROW已经LOCKED了,那就不能被其他TRANSACTION所LOCK了。 LOCK由statement产生但却由TRANSACTION结尾(commit,rollback),也就是说一个sql完成后LOCK还会存在,只有在COMMIT/RolLBACK后才会师释放。 简单举例: transactionA下面 select*fromconnectorawherea.MOBILE='13937134399'forupdata 如上,这个将会对查询出来的行加上一个行锁,如果在 transactionB下面对这一行数据进行增删改都将会等待,普通的查询可以,使用selectforupdate查询也需要等待。 需要在transactionA下面执行需要的操作之后commit或者rollback之后,在其他transaction下面才可以对此表此行进行操作。 使用这个行锁的情况一般是对并发的情况要求比较高的时候,需要锁住某行进行一些更新语句之后进行释放,再让其他transaction去操作。在这次外呼系统中很好的利用了这点解决了并发的问题。 forupdate后面还可以跟着[OFcols][NowAIT] of的使用主要是针对多表关联的时候,如果不使用of,对两个表涉及到的行都将锁住,使用of可以指定锁定哪个表, 例如:selecta.MOBILE,b.namefromconnectora,studentb wherea.STU_ID=b.IDanda.MOBILE='13937134399'forupdataofa.MOBILE 这样的话student表中对应的行是不加锁的,对connector一个表中行加锁 不使用两个表都加锁。 [NowAIT]的使用是当锁冲突的时候提示的情况: 当有LOCK冲突时会提示错误并结束STATEMENT而不是在那里等待.返回错误是"ORA-00054:resourcebusyandacquirewithNowAITspecifIEd",如果不使用就会一直等待,直到锁释放之后执行。 在页面上调试的时候由于异常处理不好,把数据锁住了没有提交,也没有rollback,遇到这样的情况的时候可以通过以下方式解决: -----查看被锁对象的序列号、sID SELECTo.owner,o.object_name,o.object_type,s.sID,s.serial# FROMv$locked_objectl,dba_objectso,v$sessions WHEREl.object_ID=o.object_ID ANDl.session_ID=s.sID ORDERBYo.object_ID,xIDusnDESC / ------利用sID和序列号删除 altersystemkillsession'243,10265'; 243是sID10265是序列号 所以在使用锁的时候一定要做好页面的异常控制,不然很容易出问题。 ******************************************************* 数据库中锁类型的介绍: 有两种基本的锁类型,排它锁(ExclusiveLocks,即X锁)和共享锁(ShareLocks,即S锁)。当数据对象被加上排它锁时,其他的事务不能对它读取和修改。加了共享锁的数据对象可以被其他事务读取,但不能修改。数据库利用这两种基本的锁类型来对数据库的事务进行并发控制。 其中DML锁(datalocks,数据锁),用于保护数据的完整性 DML锁的目的在于保证并发情况下的数据完整性,DML锁主要包括TM锁和TX锁,其中TM锁称为表级锁,TX锁称为事务锁或行级锁。

大佬总结

以上是大佬教程为你收集整理的oracle行锁 select for update全部内容,希望文章能够帮你解决oracle行锁 select for update所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: