- 四种隔离级别
- Read Uncommitted
- Read Committed
- Repeatable Read
- Serializable
- 有什么问题
- 脏写
- 两个事务并发写同一行记录,所有隔离级别下都不能允许发生这种情况
- 脏读
- 事务A读到事务B还未提交的写
- 不可重复读
- 事务中对同一行的多次读取的结果不同(因为两次读中间,其他事务对该行进行了更新并提交)
- 缓读
- 对某个范围的多次读取不同(因为两次读中间,其他事务在该范围内插入了数据并提交)
- 脏写
- 怎么解决
- MVCC
- 允许读写同时进行
- 事务利用MVCC进行的读称为一致性读或快照读
- 加锁
- 读写不能同时进行
- MVCC
- 四种隔离级别解决的问题
- Read Uncommitted
- 什么都没有解决,脏读、不可重复读、缓读都存在
- Read Committed
- 解决了脏读
- 通过ReadView实现,每次读都开启一个ReadView
- Read Committed
- 通过ReadView实现,第一次读才开启一个ReadView
- SQL标准中只要求RC解决脏读和不可重复读,InnoDB中同时解决了脏读、不可重复读和幻读
- Serializable
- 解决了脏读、不可重复读和幻读
- Read Uncommitted
网友评论