• 数据库事物


    当事务处理系统创建事务时,将确保事务有某些特性 也叫ACID特性

    ACID就是:原子性(Atomicity )、一致性( Consistency )、隔离性或独立性( Isolation)和持久性(Durabilily)

    原子性:如果事务成功完成 状态全部变更 否则全部回滚,保证系统仍然处于一致状态(有一个逻辑你有2个表一个转账记录表和用户金额表,你去操作一个转账如果其中                一个表操作失败了 用户查询的时候会误会 此时就要用到原子性操作)

    一致性:当前操作双方操作处于一致状态(在帐户转换和资金转移前,帐户处于有效状态。如果事务成功地完成,并且提交事务,则帐户处于新的有效的状态。如果事务               出错,终止后,帐户返回到原先的有效状态)

    隔离性:交叉事物不会相互干扰 

    持久性:防止数据丢失则把数据记录存储下来

    事务管理用来确保数据的完整性和一致性。
    大部分企业解决分布式事务方式都是以一致性

    常用的传播属性有7种:propagation
    PROPAGATION_REQUIRED:当前方法加入事物,内部嵌套事物失效
    PROPAGATION_REQUIRED_NEW:不管是否存在事物都会新建一个事物 外部的挂起内部的执行完再执行外部事物,内部嵌套隔离开不会相互影响提交,外部事物挂起
    PROPAGATION_SUPPORTS:上下文事务  如果外部方法有事物则内部方法加入此事物种,如果外部方法没有事物则以无事物方式运行
    PROPAGATION_NOT_SUPPORTS:非事物执行,其他事物挂起

    事物的隔离级别:isolation
    事务的隔离级别多个事务并发运行会诱发3个问题
    脏读(a方法update还未提交,b方法select出来的数据还是未提交的原数据)
    不可重复读和幻读(1或N事物。多次查询每次读的数据不一致)

    不可重复读的重点是修改 :
    同样的条件 ,   你读取过的数据 ,   再次读取出来发现值不一样了
    幻读的重点在于新增或者删除同样的条件 ,   第 1 次和第 2 次读出来的记录数不一样

    解决事务的隔离级别:

    READ_UNCOMMITTEND:,不可重复读,幻读,读未提交
    READ_COMMITTED : 可以防止脏读(锁定正在读取的行)不可重读,读提交
    ISOLATION_REPEATABLE_READ:可以防止脏读,不可重复读 ,会出幻读(锁定所读取的所有行),可重复读
    ISOLATION_SERIALIZABLE :最可靠的事务隔离级别三种问题都可以避免但是性能低(锁表),可串行化

     设置mysql隔离级别:set global tx_isolation= 级别  (READ UNCOMMITTEND| READ COMMITTEND| REPEATABLE READ | SERIALIZABLE)

    事物回滚机制

    Transaction内发生unchecked exception(RuntimeException)的时候,会自动rollback,

    Transaction内发生checked exception(java语言需要强制catch,抛给调用方来处理)时,是不会自动rollback

    不用catch就会自动回滚,如果捕获异常则不会回滚

    如果又想捕获异常又想回滚则在catch内加入:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

    群交流(262200309)
  • 相关阅读:
    《JAVA设计模式》之模板模式(Template)
    《JAVA设计模式》之策略模式(Strategy)
    《JAVA设计模式》之享元模式(Flyweight)
    《JAVA设计模式》之桥接模式(Bridge)
    《JAVA设计模式》之组合模式(Composite)
    《JAVA设计模式》之外观模式(Facade)
    《JAVA设计模式》之代理模式(Proxy)
    《JAVA设计模式》之装饰模式(Decorator)
    《JAVA设计模式》之适配器模式(Adapter)
    《JAVA设计模式》之原型模式(Prototype)
  • 原文地址:https://www.cnblogs.com/webster1/p/6648315.html
Copyright © 2020-2023  润新知