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

  • 相关阅读:
    3.2 直线与方程
    3.1.2 两条直线平等与垂直的判定
    GNU Make
    linux 启动后台进程
    go 占位符
    raft 协议
    restTemplate 接收list数据
    JAVA通过实体类生成数据库查询语句(驼峰命名规则)
    flink使用命令开始、停止任务
    SPringBoot 配置类继承WebMvcConfigurationSupport和实现WebMvcConfigurer的使用
  • 原文地址:https://www.cnblogs.com/linjiqin/p/6475643.html
Copyright © 2011-2022 走看看