• 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>
  • 相关阅读:
    第三次博客作业
    多项式求导--三次作业小结
    Python实现批量修改文件名
    汉字编程 —— 第一次个人编程作业
    PAT甲级代码仓库
    谈谈自己 —— 第一次博客作业
    爬取豆瓣网图书TOP250的信息
    HDU1862
    HDU1408
    HDU1302
  • 原文地址:https://www.cnblogs.com/chai-blogs/p/13040325.html
Copyright © 2020-2023  润新知