• MVCC 脏读理解


    MVCC是为了方便并发修改数据库的时候。防止互相影响的一个重大发明

    MVCC主要用于 读已提交、可重复读这两个事务隔离级别
    MVCC搭配使用的还有READ VIEW

    • readview 在读已提交的时候,会每条sql更新 READ VIEW
    • readview 在可重复读的时候,只在第一次快照读的时候配置 READ VIEW

    RR级别有幻读的风险,主要是出现在快照读和当前读混合使用的情况

    RR级别InnoDB通过临键锁解决幻读问题主要是体现在 for update
    RR级别如果默认使用快照读,是不会存在脏读问题的

    当前读 for update 带来的问题
    锁表
    插入 锁全表
    更新

    范围判断

    idcd
    000
    555
    101010
    151515

    命中索引,范围方向至最近一个记录记录,且包含
    例子:
    select * from t where id < 4 就会把(-∞,5]的记录锁住 注意涉及锁住记录的要从索引所在的列维度来判断
    小于最小记录(-∞ ,最小记录]
    如果大于最后一条记录,则[指定值主键,+∞ )

    等值判断

    涉及索引 当没命中。相邻的两个记录之间形成间隙锁,端点两条记录均不受锁影响,
    如果大于最后一条记录,则[指定值主键,+∞ )小于最小记录(-∞ ,最小记录] 命中只会加行锁,锁住命中那一行数据
    不涉及主键,直接锁表

    所以用forUpdate有风险

  • 相关阅读:
    ESP32使用PWM实现对舵机的控制
    MySQL的多表查询(4):SQL99下的多表查询
    如何实现 System.out.println("a") 显示 b
    Linux常用命令
    seata-server-1.5.2的部署
    状态压缩dp
    查看依赖包、插件的版本
    Java Bean之Lombok踩坑
    qiao-npms:搜索npm包
    从后端角度看安全
  • 原文地址:https://blog.csdn.net/mmdsl083/article/details/128059788