zoukankan      html  css  js  c++  java
  • 事务

    1.事务的特性ACID
            1)原子性(Atomicity)原子性是指事务是一个不可分割的工作单位,事务中的操作 要么都发生,要么都不发生。 

            2)一致性(Consistency)一个事务中,事务前后数据的完整性必须保持一致。

            3)隔离性(Isolation)多个事务,事务的隔离性是指多个用户并发访问数据库时, 一个用户的 事务不能被其它用户的事务所干扰,多个并发事务之间数据要相互隔离。

           4)持久性(Durability)持久性是指一个事务一旦被提交,它对数据库中数据的改变 就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。

        2.并发访问问题----由隔离性引起
        如果不考虑隔离性,事务存在3中并发访问问题。

            1)脏读:B事务读取到了A事务尚未提交的数据   ------  要求B事务要读取A事 务提交的数据

            2)不可重复读:一个事务中 两次读取的数据的内容不一致  ----- 要求的是一个事 务中多次读取时数据是一致的  --- unpdate

            3)幻读/虚读:一个事务中 两次读取的数据的数量不一致  ----- 要求在一个事务多 次读取的数据的数量是一致的 --insert  delete

        3.事务的隔离级别
            1)read uncommitted : 读取尚未提交的数据 :哪个问题都不能解决

            2)read committed:读取已经提交的数据 :可以解决脏读 ---- oracle默认的

            3)repeatable read:重读读取:可以解决脏读 和 不可重复读 ---mysql默认的

            4)serializable:串行化:可以解决 脏读 不可重复读 和 虚读---相当于锁表

    一:事务引发的问题:
    1.dirty reads 脏读
    一个事务正在对数据进行更新操作,但是更新还未提交,另一个事务这时也来操作这组数据,并且读取了前一个事务还未提交的数据,而前一个事务如果操作失败进行了回滚,后一个事务读取的就是错误的数据,这样就造成了脏读

    2.不可重复读
       一个事务多次读取同一个数据,在该事务还未结束时,另一个事务也对该数据进行了操作,而且在第一个事务两次读取之间,第二个事务对数据进行了更新,那么第一个事务前后两个读取到的数据是不同的,这样就造成了不可重复读


    3.幻读
    第一个数据正在查询某一条数据,这时,另一个事务又插入了一条符合条件的数据,第一个事务在第二次查询符合同一条件的数据时,发现多了一条前一次查询时没有的数据,仿佛幻觉一样,这就是幻读

    **不可重复读和幻读的区别
    不可重复读是指在同一查询事务中多次进行,由于其他提交事务所做的修改和删除,每次返回不同的结果集,此时发生不可重复读
    幻读是指在同一查询事务中多次进行,由于其他提交的事务所做的插入操作,每次返回不同的结果集,此时发生幻读

    表面上看,区别就在于不可重复读能看见其他事务提交的修改和删除,而幻读能看见其他事务提交的插入

    二、spring 事务隔离级别
    1.default:(默认)
    默认隔离级别,使用数据库默认的事务隔离级别
    2.read_uncommitted:(读未提交)
    这是事务最低的隔离级别,他允许另外一个事务可以看到这个事务未提交的数据,这种隔离级别会产生脏读,不可重复读和幻读
    3.read_committed(读已提交)
    保证一个事务修改的数据提交后才能被另外一个事务读取,另外一个事务不能读取该事务未提交的数据.这种事务隔离级别可以避免脏读,但是可能会出现不可重复读和幻读
    4.repeatable_read(可重复读)
    这种事务级别可以防止脏读,不可重复读.但是可能出现幻读.他除了保证一个事务不能读取另一个事务未提交的数据外,还保证了不可重复读
    5.Serializable 串行化
    这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。防止了脏读、不可重复读、幻读

    总结:
          脏读           不可重复读          幻读
    读未提交  会    会        会
    读已提交  不会     会              会
    可重复读       不会     不会                  会
    串行化           不会     不会               不会

    三、事务的传播行为
    1.requierd
    如果有事务那么加入事务,没有的话新建一个

    2.not_supported
    不开启事务

    3.requires_new
    不管是否存在事务,都创建一个新的事务,原来的挂起,新的执行完,继续执行老事务

    4.mandatory
    必须在一个已有的事务中执行,否则抛出异常

    5.never
    必须在一个没有的事务中执行,否则抛出异常

    6.supports
    如果其他bean调用这个方法,在其他bean中声明事务,那就用事务.如果其他bean没有声明事务那就不用事务

  • 相关阅读:
    ERP行业推荐参考书籍
    ap.ap_checks_all void_date 撤消日期
    PDF加密、解密、破解和转换软件
    rtf xml report对象库无效或包含对不能找到的对象定义的引用
    Maven +Tomcat+m2eclipse的热部署(hot deploy)
    基于 Jenkins 快速搭建持续集成环境
    Maven实战(八)——常用Maven插件介绍(下)
    备忘-tomcatmavenplugin的使用
    持续集成理论和实践的新进展
    Maven实战(六)——Gradle,构建工具的未来?
  • 原文地址:https://www.cnblogs.com/luxd/p/11050476.html
Copyright © 2011-2022 走看看