也叫事务锁。每个事务只能有一个。
每个事务对应该一个TX锁,在该事务中修改或者select for update的每一行都会指向这个锁(数据块的结构中有相关的标志)。
如果一个事务想修改的某条记录已经被另一个事务锁住,那么这个事务会等待,如果再有事务会形成一个列表,等待的信息可以在v$lock里面查到。
做一个实验(在TOM书的197页)
准备实验数据:
SCOTT@ prod> create table emp2 as select * from emp ;
Table created.
SCOTT@ prod> create table dept2 as select * from dept ;
Table created.
SCOTT@ prod> alter table dept2 add primary key (deptno ) ;
Table altered.
SCOTT@ prod> alter table emp2 add primary key (empno ) ;
Table altered.
SCOTT@ prod> alter table emp2 add foreign key ( deptno ) references dept2(deptno) ;
Table altered.
SCOTT@ prod> create index idx111 on emp2(deptno ) ;
Index created.
SESSION1:
SCOTT@ prod> update dept2 set dname = initcap(dname) ;
4 rows updated.
SESSION2:
SYS@ prod> select username , v$lock.sid , trunc(id1/power(2,16)) rbs , bitand(id1 , to_number('ffff' , 'xxxx' )) + 0 slot ,
2 id2 seq , lmode , request
3 from v$lock , v$session
4 where v