随笔-109  评论-187  文章-25  trackbacks-0
      事务是用来保证数据的一致性( integrity )而锁是保证数据的并发(控制多个事务的并发)( concurrency )。   锁的级别越高,可能会影响数据库的并发。锁的级别越低一般来说数据库的并发越好。   锁在 JDBC,JTA 以及容器管理的事务中的用法基本一样,也有写不同,主要在 JTA 分布式事务上个别又差异。 事务只是用来保证,数据一致性,一致性包括 : 能否保证与其他事务的隔离,以及能否在同一事务中保证重复读,脏读,脏写等等方面。   Oracle 在不是手工加锁的情况下, ORACLE 会自动调度锁。 ORACLE 自动调度锁得执行顺序,一般不会发生死锁现象。有些数据库会自动调度数据库锁得级别,这就增加了死锁的可能, ORACLE 永远不会自动调度锁的级别,死锁发生时, oracle 也会去自动调度,这要延时一段时间, ORACLE 自己的策略,会 ROLLBACK 一个事务,以保证发生死锁的 2 个事务都执行下去。   锁的种类很多,有 DML,DDL 锁以及其他,平时我们开发过程中主要是 DML,DDL 锁。 DML 锁又分很多方面:
RS: row share RX: row exclusive S: share SRX: share row exclusive X: exclusive  
( 1 ) RS 可以通过一下声明方式来锁定表的行
SELECT ... FROM table ... FOR UPDATE OF ... ; 

LOCK TABLE table IN ROW SHARE MODE;

一旦被 RS 锁定,不允许再对表进行 LOCK TABLE table IN EXCLUSIVE MODE

( 2 ) RX 可以通过一下声明方式来锁定表的行
INSERT INTO table ... ;

UPDATE table ... ;

DELETE FROM table ... ; 

LOCK TABLE table IN ROW EXCLUSIVE MODE;
一旦通过 RX 锁定了表中的行,不允许对表进行下列操作

LOCK TABLE table IN SHARE MODE; 

LOCK TABLE table IN SHARE EXCLUSIVE MODE;

LOCK TABLE table IN EXCLUSIVE MODE;


( 3 ) s ( share table lock )可以通过以下方式锁定表
LOCK TABLE table IN SHARE MODE (可以说有多个 S 锁定一个表) ;
允许进行的操作,所有的查询以及 SELECT ... FOR UPDATE, 和 LOCK TABLE ... IN SHARE MODE ,只允许本事务内更新数据( update ,这种情况也是只允许当前表上就一个 S 锁)
不允许的操作
LOCK TABLE table IN SHARE ROW EXCLUSIVE MODE;

LOCK TABLE table IN EXCLUSIVE MODE;

LOCK TABLE table IN ROW EXCLUSIVE MODE;
( 4 ) SRX 通过以下方式锁定表
LOCK TABLE table IN SHARE ROW EXCLUSIVE MODE;
比 S 少了一点,这里只是允许一个 SRX 锁定一个表
不允许的操作:
LOCK TABLE table IN SHARE MODE;

LOCK TABLE table IN SHARE ROW EXCLUSIVE MODE;

LOCK TABLE table IN ROW EXCLUSIVE MODE;

LOCK TABLE table IN EXCLUSIVE MODE;
( 5 ) X 级别最高的锁定形式: LOCK TABLE table IN EXCLUSIVE MODE;
只允许其他事务 QUERY 不允许其他操作。

Table 13-4 Locks Obtained By DML Statements
DML Statement Row Locks? Mode of Table Lock
SELECT ... FROM table   
INSERT INTO table ... X RX
UPDATE table ... X RX
DELETE FROM table ... X RX
SELECT ... FROM table ...    FOR UPDATE OF ... X RS-
LOCK TABLE table IN ...    
ROW SHARE MODE   RS
ROW EXCLUSIVE MODE   RX
SHARE MODE   S
SHARE EXCLUSIVE MODE   SRX
EXCLUSIVE MODE   X
 

       














这个表上很清楚
posted on 2006-11-30 10:36 小小程序程序员混口饭吃 阅读(4514) 评论(2)  编辑  收藏 所属分类: javaoracle

评论:
# re: 事务与锁的一些总结 2006-12-08 14:03 | BeanSoft
学习一下!谢了!  回复  更多评论
  
# re: 事务与锁的一些总结 2006-12-08 15:23 | loocky
大家一起学习,这是从oracle的官方网站上看到的东西,就随手总结了一下,国内目前还没有相关的文章的翻译,我也希望大家能够翻译一些东西,整理出来。  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: