• MYSQL事务隔离级别分析


    不可重复读和幻读的区别?

    先理解几个概念

    1. 不可重复读
      一个事务中,后续查询结果得到不同的数据,可被重复读隔离级别解决
    2. 幻影
      出现在查询结果集中但不出现在较早查询的结果集中的行
    3. 幻读
      一个事务中,先后执行两次查询,与此同时,另一个事务插入新行或更改行后提交,出现的数据不一致情况,比不可重复读更难防范,因为锁定第一个查询中的所有行无法阻止导致幻读出现的更改

    再来看区别

    1. 很相似
    • 前后两次查询看到的数据情况不一致
    1. 场景会有些不同
    • 不可重复读
      一般针对单行数据
      可被可重复读隔离级别解决

    • 幻读(除了序列化隔离级别外,都存在)
      一般针对多行数据,范围查询
      无法被可重复读隔离级别解决

    幻读解决方案

    1、InnoDB 间隙锁

    • 用途

      • 解决幻读
      • 用于数据恢复和复制需要(较早版本中,5.1以前?)
    • 加锁时机

      • 通过范围条件加锁
      • 使用相等条件请求给一个不存在的记录加锁

    日志格式与复制模式

    • 日志格式
      • BINLOG
    • 复制模式
      • 基于语句的复制模式:加锁性能消耗比较大
      • 基于行数据的复制:解决非安全SQL问题
      • 混合模式
      • 全局事务ID:解决主从同步问题

    针对不安全SQL,对数据上锁,导致并发性能下降,如何解决

    • innodb_locks_unsafe_for_binlog 的值设置为“on”,强制MySQL使用多版本数据一致性读,复制会出现数据不一致问题
    • 通过使用“select * from source_tab … Into outfile”和“load data infile …”语句组合来间接实现,mysql就不会对表加锁了
    • 基于行的BINLOG格式和基于行数据复制

    InnoDB在不同隔离级别下一致性读及锁的差异

  • 相关阅读:
    Python+Qt虹膜检测识别
    实习day1
    windows aseprite编译指南(白嫖)
    Citus 分布式 PostgreSQL 集群 - SQL Reference(手动查询传播)
    SpringIOC是什么?
    微服务中的熔断、降级和限流
    springboot学习笔记
    VTK 基础入门 ( 一 ) 基本实例超详解释
    模拟版图设计工程师要学些什么?从入门到入行,你想知道的都在这里了
    firewall-cmd
  • 原文地址:https://blog.csdn.net/sinat_22631433/article/details/132899384