- 脏读:看到未提交的更改的数据
- 幻读:看到未提交的新创建的数据
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锁
graph LR
RR[RR] --> weak[比RR弱]
RR --> 没有脏读和幻读
weak --> RU[Read Uncommited]
RU --> 可以读到未提交的更新
RU --> 允许脏读
weak --> RC[Read Commited]
RC --> 只能读到提交的数据
RC --> 不允许脏读,可以幻读
RR --> strict[比RR严格]
strict --> Serializable串行化 --> 读取每行数据都上锁