• 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 如果当前事务存在,则嵌套事务执行

  • 相关阅读:
    第15次Scrum会议(10/27)【欢迎来怼】
    C语言--第三周作业评分和总结(5班)
    例行报告(20171020-20171025)
    MongoDB主从复制
    副本集
    MongoDB索引
    聚合框架
    MongoDB查询操作
    MongoDB增删改
    MongoDB基本安装
  • 原文地址:https://www.cnblogs.com/linjiqin/p/6475643.html
Copyright © 2020-2023  润新知