• Spring的事务





    事务:事务指的是逻辑上的一组操作,这组操作要么都成功,要么都失败。
    Transaction事务的四大特性ACID
    1.Atomicity原子性 事务的操作要么都成功,要么都不做,只要有一个失败,就会回滚。
      如A转账100给B:A转出100,B转入100,这两步要么一起完成,要么都不做。
    2.Consistency一致性 事务的运行前后数据的完整性必须保持一致。
      如A有200,B有200,一共400,A转给B100后,总金额还是400。
    3.Isolation隔离性 并发的事务之间不会相互影响,多个并发事务之间的数据要相互隔离(设置隔离级别)。
      如A转100给B:若事务未完成,B的账户是不会多100的。
    4.Durability持久性 事务一旦提交,它所做的修改将永久的保存在数据库中,不会受其他方面的影响。
    Spring中的事务管理介绍(高层抽象包括3个接口):
    1.PlatformTransactionManager 事务管理器 2.TransactionDefinition 事务定义信息(隔离、传播、超时、只读) 3.TransactionStatus 事务具体运行状态
    如果不考虑隔离性,会引发安全问题:
    1.脏读:一个事务读取了另一个事务改写但还未提交的数据,如果这些数据被回滚,则读到的数据是无效的。 2.不可重复读:在同一事务中,多次读取同一数据返回的结果有所不同。 3.幻读:一个事务读取了几行记录后,另一个事务插入了几行数据,幻读就发生了。再后来的查询中,第一个事务就会发现有些原来没有的记录。




    隔离级别
    DEFAULT : 使用后端数据库默认的隔离级别(Spring中的选择项) READ_UNCOMMITED : 允许你读取还未提交的改变了的数据。可能导致脏、幻、不可重复读。 READ_COMMITTED : 允许在并发事务已经提交后读取。可防止脏读,但幻读和不可重复读仍可发生。(Oracle默认隔离级别) REPEATABLE_READ : 对相同字段的多次读取是一致的,除非数据被事务本身改变。可防止脏、不可重复读,但幻读仍可能发生。(MySQL默认隔离级别) SERIALIZABLE : 完全服从ACID的隔离级别,确保不发生脏、幻、不可重复读。在所有隔离级别中是最慢的,它是典型的通过完全锁定在事务中涉及的数据表来完成的。 事务的传播行为解决业务层之间的相互调用。同时调用业务层中不同类的方法
    PROPAGATION_REQUIRED : 支持当前事务,如果不存在,就新建一个。 PROPAGATION_SUPPORTS : 支持当前事务,如果不存在,就不使用事务。 PROPAGATION_MANDATORY : 支持当前事务,如果不存在,抛出异常。 PROPAGATION_REQUIRES_NEW : 如果有事务存在,挂起当前事务,创建一个新的事务。 PROPAGATION_NOT_SUPPORTED : 以非事务方式运行,如果有事务存在,挂起当前事务。 PROPAGATION_NEVER : 以非事务方式运行,如果有事务存在,抛出异常。 PROPAGATION_NESTED : 如果当前事务存在,则嵌套事务执行。
  • 相关阅读:
    nodejs 提示‘xxx’ 不是内部或外部命令解决方法
    nodejs安装express不是内部或外部命令
    菜鸟供应链升级实践
    数据治理框架解读分析
    Canal+Kafka实现MySQL与Redis数据同步
    一条 SQL 引发的事故,同事直接被开除!!
    我用几行 Python 自动化脚本完美解决掉了小姐姐的微信焦虑感
    从 Storm 迁移到 Flink,美团外卖实时数仓建设实践
    供应链管理学习心得
    解密京东智慧供应链
  • 原文地址:https://www.cnblogs.com/shiysin/p/10688207.html
Copyright © 2020-2023  润新知