zoukankan      html  css  js  c++  java
  • 事务与锁的一些总结

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

     

    
           














    这个表上很清楚

  • 相关阅读:
    LVS+keepalived DR模式配置 实现高可用集群
    lamp+redis集群配置详解
    Centos7.4+Mariadb集群-主从配置介绍
    centos6.5 LVS-DR模式---全内网环境
    Cacti安装使用&流量监控详解
    纯CSS模拟安卓滑动开关
    Java静态泛型方法使用例子-工具类
    基于KaliLinux的GNOME美化
    ArchLinux安装笔记
    [笔记] SpringMVC+Mybatis搭建Web开发环境
  • 原文地址:https://www.cnblogs.com/huqingyu/p/1650806.html
Copyright © 2011-2022 走看看