zoukankan      html  css  js  c++  java
  • MySQL事务隔离级别详解

    MySQL事务隔离级别详解

    Spring的4种事务特性,4种隔离级别,7种传播行为

    1、4种事务特性
    原子性 (atomicity):强调事务的不可分割.
    一致性 (consistency):事务的执行的前后数据的完整性保持一致.
    隔离性 (isolation):一个事务执行的过程中,不应该受到其他事务的干扰
    持久性(durability) :事务一旦结束,数据就持久到数据库

    如果不考虑隔离性引发安全性问题:
    脏读 :一个事务读到了另一个事务的未提交的数据
    不可重复读 :事务A首先读取了一条数据,然后执行逻辑的时候,事务B将这条数据改变了,然后事务A再次读取的时候,发现数据不匹配了,就是所谓的不可重复读了。

    也就是说,当前事务先进行了一次数据读取,然后再次读取到的数据是别的事务修改成功的数据,导致两次读取到的数据不匹配,也就照应了不可重复读的语义。

    幻读 :一个事务读到了另一个事务已经提交的 insert 的数据导致多次查询结果不一致。
    比如:事务A在执行读取操作,需要两次统计数据的总量,前一次查询数据总量后,此时事务B执行了新增数据的操作并提交后,这个时候事务A读取的数据总量和之前统计的不一样,就像产生了幻觉一样,平白无故的多了几条数据,成为幻读。

    不可重复读和幻读比较:
    两者有些相似,不可重复读针对的是update或delete,而幻读针对的insert。

    2、4种隔离级别
    未提交读(read uncommited) :脏读,不可重复读,幻读都有可能发生
    已提交读 (read commited):避免脏读。但是不可重复读和幻读有可能发生
    可重复读 (repeatable read) :避免脏读和不可重复读,但是幻读有可能发生
    幻读(serializable) :避免以上所有读问题

    3、7种传播行为
    * 保证同一个事务中
    PROPAGATION_REQUIRED 支持当前事务,如果不存在 就新建一个(默认)
    PROPAGATION_SUPPORTS 支持当前事务,如果不存在,就不使用事务
    PROPAGATION_MANDATORY 支持当前事务,如果不存在,抛出异常

    * 保证没有在同一个事务中
    PROPAGATION_REQUIRES_NEW 如果有事务存在,挂起当前事务,创建一个新的事务
    PROPAGATION_NOT_SUPPORTED 以非事务方式运行,如果有事务存在,挂起当前事务
    PROPAGATION_NEVER 以非事务方式运行,如果有事务存在,抛出异常
    PROPAGATION_NESTED 如果当前事务存在,则嵌套事务执行

  • 相关阅读:
    post和get请求
    博客开通了
    【树形动态规划】【CTSC1997】选课 解题报告
    【动态规划】天堂(Heaven) 解题报告
    [NOIP2013]积木大赛
    [树状数组+逆序对][NOIP2013]火柴排队
    [快速幂][NOIP2012]转圈游戏
    [前缀和+二分]借教室
    [字符串]TrBBnsformBBtion
    [NOIP2012]国王游戏
  • 原文地址:https://www.cnblogs.com/linjiqin/p/6475643.html
Copyright © 2011-2022 走看看