返回

Java Spring事务

发布时间:2023-02-14 23:37:07 265
# 数据库# 数据

三种问题

  • ​脏读​​:A事务读取了并发事务B未提交的数据。若并发事务B失败导致回滚,则A读取到数据为不正确数据,即脏数据
  • ​不可重复读​​:A事务对某一字段进行多次读取,在两次读取过程中B事务对改数据进行修改,导致A两次读取数据结果不一致
  • ​幻读​​:A事务读取两次数据,在此过程中B事务新增/删除数据,导致两次读取数据​​集合​​不一致。例如:A事务将某字段所有数据更新为1,此时B事务插入一条该字段值为2的数据,A再次读取,发生幻读。

四大特性(ACID)

  • ​原子性​​:事务所包含所有操作要么全部成功,要么全部失败回滚
  • ​一致性​​:事务必须由一个状态到另一个状态,事务执行之前和执行之后都必须处于一致性状态(要么成功,要么失败,不存在第三种状态)
  • ​隔离性​​:事务并发执行时,不能被其他事务干扰,多个并发事务间要相互隔离
  • ​持久性​​:事务一旦提交,对数据库中数据改变就是永久性的,任何错误都不会影响该事务的执行结果

五种隔离级别

  • ​ISOLATION_DEFAULT​​:默认隔离级别
  • ​ISOLATION_READ_UNCOMMITED​​:读未提交。最低隔离级别,允许读取未提交的事务数据,可能导致脏读、幻读、不可重复读
  • ​ISOLATION_READ_COMMITED​​:读已提交。允许读取并发事务已提交的数据,可以防止脏读
  • ​ISOLATION_REPEATABLE_READ​​:可重复读。对同一字段多次读取结果是一致的,可以阻止脏读和不可重复读。
  • ​ISOLATION_SERIALIZABLE​​:串行化。最高的隔离级别。完全服从ACID的隔离级别。所有事务逐次执行,效率低,影响程序性能。

六种传播级别

支持当前事务情况

  • ​PROPAGATION_REQUIRED​​:如果当前存在事务,则加入该事务;如果不存在事务,则创建一个新的事务。
  • ​PROPAGATION_SUPPORTS​​:如果当前存在事务,则加入该事务;如果不存在事务,则以非事务的方式运行。
  • ​PROPAGATION_MANDATORY​​:如果当前存在事务,则加入该事务;如果不存在事务,则抛出异常。

不支持当前事务情况

  • ​PROPAGATION_REQUIRES_NEW​​:创建一个新的事务,如果当前存在事务,则把当前事务挂起
  • ​PROPAGATION_NOT_SUPPORTED​​:以非事务方式运行,如果当前存在事务,则把当前事务挂起
  • ​PROPAGATION_NEVER​​:以非事务方式运行,如果当前存在事务,则抛出异常

其他情况

  • ​PROPAGATION_NESTED​​:如果存在当前事务,则创建一个新事物作为嵌套事务运行;否则与​​PROPAGATION_REQUIRED​​一样
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线
下一篇
01.Java面试都问啥 2023-02-14 23:08:56