文章目录
一、背景
数据库事务的相关概念及问题学习总结
二、问题点
- MySQL事务隔离级别,MySQL的默认隔离级别是什么?
- 脏读、幻读、不可重复读?
- 可重复读解决了哪些问题?
- MVCC 是什么?它的底层原理是什么?
三、分析
3.1 MySQL事务隔离级别,MySQL的默认隔离级别是什么?
MYSQL有四种隔离级别,分别是读未提交,读已提交,可重复读,串行化。
MYSQL的默认隔离级别为RR可重复读。
3.3 可重复读解决了哪些问题?
可重复读解决了脏读,不可重复读的问题。并且在快照读的情况下解决了幻读问题,在当前读的情况下没有解决幻读问题。
原因是在当前读的情况下会更新mvcc一致性视图,读取到事务外的提交记录。
3.2 脏读、幻读、不可重复读?
脏读:一个事物读取到其他事物更改未提交的数据,假若另一个事务回滚,可能会操作不存在的数据
不可重复读:同一个事务内一开始读取到的一批数据后来因为其他事物的提交再次读取发生变化导致不一致
幻读:同一个事务内一开始读取到的数据数量和之后读取到的不一致。
3.3 MVCC 是什么?它的底层原理是什么?
mvcc为多版本并发控制,通过读取历史版本的数据,降低并发事务的冲突,提高并发性能的一种机制。
● 事务版本号
● 表的隐藏列
● undo log
● read view
通过记录事务版本号,和事务的回滚指针到undo log中生成一张当前记录的单向链表,最早的更新为链尾。
read view则是在快照读时判读各个版本的可见性,达到最终的mvcc版本控制,生成一致性视图。