zoukankan      html  css  js  c++  java
  • 事务

    事务简单总结

    数据库事务(transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行, 要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组

    事务的ACID特性

    A:原子性

    C:一致性

    I(isolation):隔离性

    D:持久性

    传播行为 7种

    PROPAGATION_REQUIRED 表示当前方法必须运行在事务中。如果当前事务存在,方法将会在该事务中运行。否则,会启动一个新的事务。
    PROPAGATION_SUPPORTS 表示当前方法不需要事务上下文,但是如果存在当前事务的话,那么该方法会在这个事务中运行。
    PROPAGATION_MANDATORY 表示该方法必须在事务中运行,如果当前事务不存在,则会抛出一个异常
    PROPAGATION_REQUIRED_NEW 表示当前方法必须运行在它自己的事务中。一个新的事务将被启动。如果存在当前事务,在该方法执行期间,当前事务会被挂起。如果使用JTATransactionManager的话,则需要访问TransactionManager。
    PROPAGATION_NOT_SUPPORTED表示该方法不应该运行在事务中。如果存在当前事务,在该方法运行期间,当前事务将被挂起。如果使用JTATransactionManager的话,则需要访问TransactionManager。
    PROPAGATION_NEVER表示当前方法不应该运行在事务上下文中。如果当前正有一个事务在运行,则会抛出异常。
    PROPAGATION_NESTED表示如果当前已经存在一个事务,那么该方法将会在嵌套事务中运行。嵌套的事务可以独立于当前事务进行单独地提交或回
    滚。如果当前事务不存在,那么其行为与PROPAGATION_REQUIRED一样。注意各厂商对这种传播行为的支持是有所差异的。可以参考资源管理器的文档来确认它们是否支持嵌套事务

    在程序中,通过 @Transactional 注解的 propagation 属性设置事务传播行为。

    @Transactional(propagation = Propagation.REQUIRED)

    隔离级别 5种

    ISOLATION_DEFAULT 使用后端数据库默认的隔离级别。
    ISOLATION_READ_UNCOMMITTED 最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读。
    ISOLATION_READ_COMMITTED 允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生。
    ISOLATION_REPEATABLE_READ 对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻 读仍有可能发生。
    ISOLATION_SERIALIZABLE最高的隔离级别,完全服从ACID的隔离级别,确保阻止脏读、不可重复读以及幻读,也是最慢的事务隔离级别,因为 它通常是通过完全锁定事务相关的数据库表来实现的。

    在程序中,通过 @Transactional 注解的 isolation 属性设置事务的隔离级别。

    @Transactional(isolation=Isolation.DEFAULT)

    脏读

    脏读是指一个事务处理过程里读取了另一个未提交的事务中的数据。 当一个事务正在多次修改某个数 据,而在这个事务中这多次的修改都还未提交,这时一个并发的事务来访问该数据,就会造成两个事务得 到的数据不一致。

    不可重复读

    不可重复取是指在对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是由于 在查询间隔,被另一个事务修改并提交了。

    幻读

    幻读是事务非独立执行时发生的一种现象。

    幻读和不可重复读都是读取了另一条已经提交的事务(这点与脏读不同),所不同的是不可重复读查询的 都是同一个数据项,而幻读针对的是一批数据整体(比如用count查询数据的个数)。

     

    事务的使用

    1,编程式事务

    2,申明式事务

    3,类级别事务

    4,方法级别事务

    操作关系型数据库

    不允许将@Transactional标注到DAO上; 不允许将@Transactional标注到Controller上; Controller中的handler方法中,只允许调用一个Service方法; 绝对不允许在Controller中的handler方法中编排服务,因为编排服务本身就是业务逻辑,属于服务

    5,分布式事务 CAP理论

  • 相关阅读:
    SilkTest天龙八部系列1-初始化和构造函数
    SilkTest天龙八部系列3-动态父窗口
    SilkTest天龙八部系列4-ChildWin
    java程序查不出数据来
    关于模拟器不能运行项目问题:Installation error: INSTALL_FAILED_INSUFFICIENT_STORAGE
    汉语-词语:寂静
    汉语-词语:幽静
    汉语-词语:恬静
    汉语-词语:静谧
    汉语-词语:冷静
  • 原文地址:https://www.cnblogs.com/Src-z/p/14321311.html
Copyright © 2011-2022 走看看