首页 > Web开发 > 详细

hibernate基础23:事务的隔离级别

时间:2020-06-03 22:24:55      阅读:55      评论:0      收藏:0      [点我收藏+]

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>

 

hibernate基础23:事务的隔离级别

原文:https://www.cnblogs.com/chai-blogs/p/13040325.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!