阅读 83

MySql中的事务隔离级别/ACID/MVCC

  • 脏读:看到未提交的更改的数据
  • 幻读:看到未提交的新创建的数据

MVCC

MySql中的 MVCC(multiple version concurrency control),多版本并发控制,就是通过版本号实现脏读幻读的隔离,具体实现看下面 Innodb 是怎样防止脏读和幻读的


ACID

  • 原子性(Atomic)
    • 操作不可再分,start/rollback/commit控制
  • 一致性(Consistency)
    • 事务执行前后数据关系不被破坏
    • 工具:锁
  • 隔离性(Isolation)
    • 多个事务间执行隔离(支持并发)
    • 默认隔离级别是RR(Repeatable Read)
    • Innodb防止脏读是怎么实现的
    • Innodb防止幻读是怎么实现的
    • MVVC:multiple version concurrency control(多版本并发控制)
  • 持久性(Durability)

Innodb防止脏读是怎么实现的

当前事务只能看得到比自己版本号小的行,看不到比自己大的行


Innodb防止幻读是怎么实现的

插入的例子,原理同上

删除的例子,添加一个删除标记版本号

MVCC的缺陷就是会产生冗余数据


MySql隔离级别,默认隔离级别是RR(Repeatable Read)

MySql默认隔离级别+RR.png


MySql锁

MySql锁.png




graph LR

RR[RR] --> weak[比RR弱]
RR --> 没有脏读和幻读

weak --> RU[Read Uncommited]
RU --> 可以读到未提交的更新
RU --> 允许脏读

weak --> RC[Read Commited]
RC --> 只能读到提交的数据
RC --> 不允许脏读,可以幻读

RR --> strict[比RR严格]
strict --> Serializable串行化 --> 读取每行数据都上锁
文章分类
后端
文章标签