Select…For Update语句与锁
Select…For Update语句的语法与select语句相同,只是在select语句的后面加FOR UPDATE [NOWAIT]子句。
该语句用来锁定特定的行(如果有where子句,就是满足where条件的那些行)。当这些行被锁定后,其他会话可以选择这些行,但不能更改或删除这些行,直到该语句的事务被commit语句或rollback语句结束为止。
如图20.51所示,左上角的会话用Select…For Update语句锁定了Department表中DeptNo='01'的行,右上角的会话说明其他会话不可以继续更改该行上的数据。从OEM中的锁的信息可以看出,Select…For Update语句所加的锁与update语句所加的锁相同:一个行级别的EXCLUSIVE锁(说明多个事务不能同时操作同一行)、一个表级别的ROW EXCLUSIVE锁。
图20.51 Select…For Update语句锁定了符合where条件的行
如图20.52所示,左上角的会话用Update语句锁定了Department表中DeptNo='01'的行,右上角的会话说明其他会话不可以用Select…For Update语句继续锁定该行。
图20.52 Select…For Update语句被其他会话阻塞了
如图20.53所示,左上角的会话用Update语句锁定了Department表中DeptNo='01'的行,右上角的会话说明其他会话不可以用Select…For Update NOWAIT语句继续锁定该行,且会立即返回一个错误提示“ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源”,而不需要等待加锁成功。
图20.53 如果加锁不成功,则Select…For Update NOWAIT语句就会立即返回错误提示
可以看出,如果仅仅用update语句来更改数据时,可能会因为加不上锁而没有响应地、莫名其妙地等待,但如果在此之前,先用Select…For Update NOWAIT语句将要更改的数据试探性地加锁,就可以通过立即返回的错误提示而明白其中的道理,或许这就是For Update和NOWAIT的意义之所在。
原文: http://book.csdn.net/bookfiles/188/1001888666.shtml
分享到:
相关推荐
根据update语句自动生成select语句.
本文介绍在mysql中使用mysql SELECT FOR UPDATE 语句时的一些问题与解决办法
这种只有update无法执行其他语句可以执行的其实是因为记录锁导致的,在oracle中,执行了update或者insert语句后,都会要求commit,如果不commit却强制关闭连接,oracle就会将这条提交的记录锁住。由于我的java程序...
数据库oracle锁: for update of和for update的区别,解释得很清楚,有很多详细例子说明。
今天,我们将讨论 Oracle 中的 Update 语句,包括 Update 语句的基本语法、Update 语句中使用 Select 语句、Update 语句中使用 Join 语句、Insert 语句的使用等。 一、Update 语句的基本语法 Update 语句的基本...
MySQL 数据库中 group by 语句与 update 语句的用法研究 本论文对 MySQL 数据库中的 group by 语句和 update 语句进行了深入研究,讨论了这些语句在数据库查询和修改中的应用,并给出了具体的解决方案。 一、MySQL...
最近有项目需求,需要保证多台机器不拿到相同的数据,后来发现... for update经常导致数据库死锁问题,下面小编给大家介绍mysql 数据库死锁过程分析(select for update),对mysql数据库死锁问题感兴趣的朋友一起学习吧
首先在数据库中创建存储过程和方法,然后调用创建好的存储过程,生成带有与表名及字段相关的insert,update,delete语句,变量与表字段名相同,例如: "insert into temp (col1,col2,col3) values ('"+col1+"','"+col2...
经典SQL语句大全 update select delete drop create经典SQL语句大全 update select delete drop create经典SQL语句大全 update select delete drop create经典SQL语句大全 update select delete drop create
需要注意的是,UPDATE语句中不能使用ORDER BY或LIMIT子句与multiple-table UPDATE同时使用。在一个被改变的multiple-table UPDATE中, 有些列被引用。您只需要这些列的UPDATE权限。有些列被读取了,但是没被修改。您...
把其它表作为条件和更新值的更新语句;例如: 两表(多表)关联update -- 仅在where字句中的连接 --这次提取的数据都是VIP,且包括新增的,所以顺便更新客户类别 update customers a -- 使用别名 set customer_type=...
这个文档是自己到网上找到对基础sql语句总结蛮好的希望对大家有点帮助。
Select/update/delete……from……where……groupby……having……orderby……asc/desc 其中的update/delete为Hibernate3中所新添加的功能,可见HQL查询非常类似于标准SQL查询。
EAS二次开发中DEP在编辑或者列表界面写脚本时可调用的执行sql语句的方法。【本方法仅用于客户端代码中,如果是服务端代码,即对某实体进行DEP拓展,请参照官方出品DEP脚本指南】
shell连接oracle数据库工具脚本:支持select/insert/update/delete 部署位置:/root/sysmonitor db:数据库文件夹 dbconfig.properties:数据库配置文件, dbConnectTest.sh:连接测试文件 dbExecurteSQL.sh:...
SQL四条最基本的数据操作语句:Insert,Select,Update和Delete详解.pdfSQL四条最基本的数据操作语句:Insert,Select,Update和Delete详解.pdf
练掌握SQL是数据库用户的宝贵财 富。在本文中,我们将引导你掌握四条最基本的数据操作语句—SQL的核心功能—来依次介绍比较操作符、选择断言以及三值逻辑。当你完成这些学习后,显然你已经开始算是精通SQL了。
由于update涉及到数据的修改,所以,很容易推断,update语句比select语句会更复杂一些。 1,准备 创建一张test表 CREATE TABLE `test` ( `id` int(11) NOT NULL AUTO_INCREMENT, `c` int(11) NOT NULL DEFAULT '...