zoukankan      html  css  js  c++  java
  • hibernate基础23:事务的隔离级别

    1、事务的基本概念(ACID):

      A:atomicity(原子性):表示一个事务内的所有操作是一个整体,要么全部成功,要么全失败

      C:consistency(一致性):表示一个事务内有一个操作失败时,所有更改过的数据都必须回滚到修改前的状态

      I:isolation(隔离性):事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据

      D:durability(持久性):事务完成后,它对系统的影响是持久性的

    2、事务隔离级别(从低到高)

      读取未提交(Read Uncommitted)

    • 这是最低的事务隔离级别,读事务不会阻塞读事务和写事务(读时可读可写),写事务也不会阻塞读事务,写事务会阻塞写事务(写时可读不可写)
    • 写事务不阻塞读事务,可以读取未提交的数据,容易造成脏读问题
    • 脏读解决方案:如果在第一个事务提交前,任何事务不可读取其修改过的值,则可以避免该问题

      读取已提交(Read Committed)

    • 读事务不阻塞读事务和写事务(读时可读可写),写事务阻塞读事务和写事务(写时不可读写)
    • 读事务不阻塞写事务有可能造成不可重复度问题(在同一个事务中再次读取事务时(select操作),所读取的数据和上一次读取的数据结果不一致)【修改update事务发生率高】
    • 不可重复读解决方案:锁住已经查询出来的记录,不让其他事务进行写操作

      可重复读(Repeatable Read)

    • 读事务会阻塞写事务,读事务不会阻塞读事务(读时可读不可写),写事务阻塞读事务和写事务(写时不可读写)
    • 读事务不阻塞读事务(针对的是记录而不是表),可能会造成幻读问题【新增insert/删除delete事务发生率高】
    • 幻读解决方案:解决办法是锁表,不让产生幻读的记录插入和删除,项目中一般不考虑幻读问题

      序列化(Serializable)

    • 此隔离级别是最严格的隔离级别,如果设置成这个隔离级别,那么就不会出现以上所有问题(脏读、不可重复的、幻读)
    • 性能极低,一般不用

    3、一般采用读取已提交,配合各种并发访问控制策略来达到并发事务控制的目的。

      hibernate使用(配置hibernate.cfg.xml)

    <!-- 制定事务隔离级别:1、2、4、8对应二进制0001、0010、0100、1000,采用位运算。权限控制经常采用二进制位运算 -->
            <property name="hibernate.connection.isolation">2</property>
  • 相关阅读:
    10 个迅速提升你 Git 水平的提示
    git-自动补全
    Andriod Atom x86模拟器启动报错
    Android SDK Manager 无法更新SDK
    tiny4412 解决内核编译版本号问题
    Move resources allocated using unmanaged interface to managed devm interface
    原理图学习
    解决tiny4412在win7 64位上adb无法使用失败的问题
    popcount 算法分析
    linux中断申请之request_threaded_irq
  • 原文地址:https://www.cnblogs.com/chai-blogs/p/13040325.html
Copyright © 2011-2022 走看看