Oracle For update研究

 

For update

1 select * from hjh for update [of hjh.a]; 锁定表的所有行

可以select,insert,不可以update,Delete  Commit提交后,解除锁定

2 SELECT * FROM hjh WHERE a = 1 FOR UPDATE [of hjh.a]; 只锁定a=1的行

3 SELECT a.a, t1.d FROM hjh a, t1 WHERE a.a = t1.c [and a.a = 2] FOR UPDATE; 锁定两个表的中满足条件的行

4 SELECT a.a, t1.d FROM   hjh a,t1 WHERE a.a = t1.c [and a.a = 2] FOR UPDATE OF a.a; 只锁定hjh中满足条件的行

行级共享锁,然后以独占方式进行修改数据(update,delete)

FOR UPDATE 的时候 ,其他人不能更改你查询出来的记录

commitrollback都可以释放锁

 

DML锁包括table-level locks(TM)Row-level locks(TX)

说明row-level lock(TX type)是为了确保其它用户不可以在相同的时间修改相同的行

TM 是对象锁,表示可能在这个对象上做了什么操作,还没有结束,所以不允许ddl

TX 是事务锁,表示发起了一个事务,发起事务的判别标准

posted @ 2009-01-06 13:13  zping  阅读(4915)  评论(0编辑  收藏  举报