假设有一个表t1
A B
---- -----
10 test
11 haha
12 ccccupdate t1 set b='right' where a=10 ---这个是表锁
select * from t1 where a=10 for update of b nowait --这个配合游标据说是行级锁
那么,兄弟,以下的是什么锁?有没有办法证明一下?
update (select * from t1 where a=10) set b='right'我现在碰到并发性的问题,行级锁可以大大增强数据库的并发性,别小看这个sql语句!:)请高手指导!!谢了。
A B
---- -----
10 test
11 haha
12 ccccupdate t1 set b='right' where a=10 ---这个是表锁
select * from t1 where a=10 for update of b nowait --这个配合游标据说是行级锁
那么,兄弟,以下的是什么锁?有没有办法证明一下?
update (select * from t1 where a=10) set b='right'我现在碰到并发性的问题,行级锁可以大大增强数据库的并发性,别小看这个sql语句!:)请高手指导!!谢了。
rtrim(object_type) object_type,rtrim(owner) || '.' || object_name object_name,
decode(lmode, 0, 'None',
1, 'Null',
2, 'Row-S',
3, 'Row-X',
4, 'Share',
5, 'S/Row-X',
6, 'Exclusive', 'Unknown') LockMode,
decode(request, 0, 'None',
1, 'Null',
2, 'Row-S',
3, 'Row-X',
4, 'Share',
5, 'S/Row-X',
6, 'Exclusive', 'Unknown') RequestMode
,ctime, block b,
v$session.username,MACHINE,MODULE,ACTION,
decode(A.type,
'MR', 'Media Recovery',
'RT','Redo Thread',
'UN','User Name',
'TX', 'Transaction',
'TM', 'DML',
'UL', 'PL/SQL User Lock',
'DX', 'Distributed Xaction',
'CF', 'Control File',
'IS', 'Instance State',
'FS', 'File Set',
'IR', 'Instance Recovery',
'ST', 'Disk Space Transaction',
'TS', 'Temp Segment',
'IV', 'Library Cache Invalida-tion',
'LS', 'Log Start or Switch',
'RW', 'Row Wait',
'SQ', 'Sequence Number',
'TE', 'Extend Table',
'TT', 'Temp Table',
'Unknown') LockType
from (SELECT * FROM V$LOCK) A, all_objects,V$SESSION,v$process
where A.sid > 6
and object_name<>'OBJ$'
and A.id1 = all_objects.object_id
and A.sid=v$session.sid
and v$process.addr=v$session.paddr;
执行上面的语句察看lockmode
-------------------------------------------------------------------------
----简直胡扯楼主真是个oracle菜鸟,
呵呵,这么简单的问题还要问,
典型都是DML行琐
update scott.emp set ename='aaa' where empno=7369;select * from v$lock where sid=20;ADDR KADDR SID TYPE ID1 ID2 LMODE REQUEST CTIME BLOCK
-------- -------- ---------- ---- ---------- ---------- ---------- ---------- ---------- ----------
67B7AD90 67B7AE9C 20 TX 524294 25679 6 0 29 0
67B4E074 67B4E088 20 TM 30139 0 3 0 29 0
update (select * from scott.emp where empno=7369) set ename='aaa'ADDR KADDR SID TYPE ID1 ID2 LMODE REQUEST CTIME BLOCK
-------- -------- ---------- ---- ---------- ---------- ---------- ---------- ---------- ----------
67B7AD90 67B7AE9C 20 TX 131097 25689 6 0 9 0
67B4E074 67B4E088 20 TM 30139 0 3 0 9 0可见update scott.emp set ename='aaa' where empno=7369和update (select * from scott.emp where empno=7369) set ename='aaa'
的加锁机制是相同的select * from scott.emp where empno=7369 for update nowaitADDR KADDR SID TYPE ID1 ID2 LMODE REQUEST CTIME BLOCK
-------- -------- ---------- ---- ---------- ---------- ---------- ---------- ---------- ----------
67B7AD90 67B7AE9C 20 TX 262182 25685 6 0 9 0
67B4E074 67B4E088 20 TM 30139 0 2 0 9 0for update的表级锁模式为2,说明表中的某行获得了共享锁