select … for update 的解释概念
来源:互联网 发布:java缓存面试题 编辑:程序博客网 时间:2024/05/22 04:45
statement: 一个SQL语句。
session: 一个由ORACLE用户产生的连接,一个用户可以产生多个SESSION ,但相互之间是独立的。
transaction:所有的改变都可以划分到transaction里,一个 transaction包含一个或多个SQL。当一个SESSION建立的时候就是一个TRANSACTION开始的时刻,此后transaction的 开始和结束由DCL控制,也就是每个COMMIT/ROLLBACK都标示着一个transaction的结束。
consistency:是对于statement级别而不是transaction级别来说的。sql statement 得到的数据都是以sql statement开始的IMAGE。
LOCK的基本情况:
update, insert ,delete, select ... for update会LOCK相应的ROW 。
只有一个TRANSACTION可以LOCK相应的行,也就是说如果一个ROW已经LOCKED了,那就不能被其他TRANSACTION所LOCK了。
LOCK由statement产生但却由TRANSACTION结尾(commit,rollback),也就是说一个SQL完成后LOCK还会存在,只有在COMMIT/ROLLBACK后才会RELEASE。
SELECT.... FOR UPDATE [OF cols] [NOWAIT];OF colsSELECT cols FROM tables [WHERE...] FOR UPDATE [OF cols] [NOWAIT];
前面的FOR UPDATE省略,下面我们来讲一下OF。
transaction A运行select a.object_name,a.object_id from wwm2 a,wwm3 b2 where b.status='VALID' and a.object_id=b.object_id3* for update of a.status
则transaction B可以对b表wwm3的相应行进行DML操作,但不能对a表wwm2相应行进行DML操作.
反一下看看。
transaction A运行select a.object_name,a.object_id from wwm2 a,wwm3 b2 where b.status='VALID' and a.object_id=b.object_id3* for update of b.status
则transaction B可以对a表wwm2的相应行进行DML操作,但不能对b表wwm3相应行进行DML操作.
也就是说LOCK的还是行,只是如果不加OF的话会对所有涉及的表LOCK的,加了OF后只会LOCK OF 字句所在的TABLE.
NOWAIT(如果一定要用FOR UPDATE,我更建议加上NOWAIT)
当有LOCK冲突时会提示错误并结束STATEMENT而不是在那里等待.返回错误是"ORA-00054: resource busy and acquire with NOWAIT specified"
另外如下用法也值得推荐,应该酌情考虑使用。
FOR UPDATE WAIT 5
5秒后会出现提示:
ORA-30006: resource busy; acquire with WAIT timeout expiredFOR UPDATE NOWAIT SKIP LOCKED;
出现提示:
no rows selectedTABLE LOCKSLOCK TABLE table(s) IN EXCLUSIVE MODE [NOWAIT];
同样也是在transaction结束时才会释放lock。
DEADLOCK:
transaction a lock rowA , then transaction b lock rowBthen transaction a tries to lock rowB, and transaction b tries to lock rowA
也就是说两个transaction都相互试图去lock对方已经lock的ROW,都在等待对方释放自己的lock,这样就使死锁。另外,deadlock也会有600提示。
使用说明
Select…For Update语句的语法与select语句相同,只是在select语句的后面加FOR UPDATE [NOWAIT]子句。
该语句用来锁定特定的行(如果有where子句,就是满足where条件的那些行)。当这些行被锁定后,其他会话可以选择这些行,但不能更改或删除这些行,直到该语句的事务被commit语句或rollback语句结束为止。
- select … for update 的解释概念
- SELECT FOR UPDATE的一些概念
- 讲解有关"SELECT FOR UPDATE"的一些概念
- 讲解有关“SELECT FOR UPDATE“的一些概念
- 讲解有关“SELECT FOR UPDATE“的一些概念
- 讲解有关"SELECT FOR UPDATE"的一些概念
- Select…For Update
- Oracle的select for update
- oracle的select for update
- select for update和select for update wait和select for update nowait的区别
- select ......for update 语句解释 (文章中有些地方描述的不是很准确)
- select ... for update, select ... for update nowait
- SQL的SELECT FOR UPDATE游标
- 有关"SELECT FOR UPDATE"的一些问题
- SELECT FOR UPDATE 相关的知识
- select for update的相关知识
- 有关"SELECT FOR UPDATE"的一些问题 .
- SELECT语句中的for update的用法
- 城市间最短路径问题(SQL解决方案)
- 自定义iOS搜索框
- WiFi流量劫持—— 浏览任意页面即可中毒!
- 获取用户真实ip方法
- 关于C++运算符的重载
- select … for update 的解释概念
- Pads logic 中如何将一个大的元器件分成好几部分来画
- 解决无法使用Nexus中央仓库的jar包进行上传和下载的问题
- Python凡人笔记
- spice server 显示中的item创建及处理
- UML用例图总结
- 给自己点压力,让自己每天进步一点
- js中window.open和showModalDialog的区别
- android APK反编译