事务与锁的一些总结

事务是用来保证数据的一致性( 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

 


       














这个表上很清楚

原文地址:https://www.cnblogs.com/huqingyu/p/1650806.html