共计 1261 个字符,预计需要花费 4 分钟才能阅读完成。
一个工作了 6 年的粉丝,去阿里面试,在第一面的时候被问到”Mysql 的事务隔离级别“。
他居然没有答复上来,始终在私信向我诉苦。
我说,你只能怪年老时候的你,那个时候不够致力导致当初的你技术水平不够。
好吧,对于这个问题,看看普通人和高手的答复。
普通人:
Mysql 的事务隔离级别它有四种
1. 读已提交
2. 可反复读
3. 串行化
4. 未提交读
这四种隔离级别代表的是说我在不同的那个 … 就是我多个事务竞争的时候那么我每一个就是我的这个事务并发执行的时候并行执行的时候我对数据的一个影响。
比如说我事务之间的一个隔离性,所以通过不同的这种隔离级别它能够去解决所谓的这个幻读或者不可反复读以及说那个读未提交这些问题。
而后我记得就是这个最平安的是那种就串行化,串行化就是说它不会存在任何的这个下面幻读不可反复读的一些问题。
高手:
好的,对于这个问题,我会从几个方面来答复。
首先,事务隔离级别,是为了解决多个并行事务竞争导致的数据安全问题的一种标准。
具体来说,多个事务竞争可能会产生三种不同的景象。
假如有两个事务 T1/T2 同时在执行,T1 事务有可能会读取到 T2 事务未提交的数据,然而未提交的事务 T2 可能会回滚,也就导致了 T1 事务读取到最终不肯定存在的数据产生脏读的景象。
假如有两个事务 T1/T2 同时执行,事务 T1 在不同的时刻读取同一行数据的时候后果可能不一样,从而导致不可反复读的问题。
假如有两个事务 T1/T2 同时执行,事务 T1 执行范畴查问或者范畴批改的过程中,事务 T2 插入了一条属于事务 T1 范畴内的数据并且提交了,这时候在事务 T1 查问发现多进去了一条数据,或者在 T1 事务发现这条数据没有被批改,看起来像是产生了幻觉,这种景象称为幻读。
而这三种景象在理论利用中,可能有些场景不能承受某些景象的存在,所以在 SQL 规范中定义了四种隔离级别,别离是:
- 读未提交,在这种隔离级别下,可能会产生脏读、不可反复读、幻读。
- 读已提交(RC),在这种隔离级别下,可能会产生不可反复读和幻读。
- 可反复读(RR),在这种隔离级别下,可能会产生幻读
- 串行化,在这种隔离级别下,多个并行事务串行化执行,不会产生安全性问题。
这四种隔离级别外面,只有串行化解决了全副的问题,但也意味着这种隔离级别的性能是最低的。
在 Mysql 外面,InnoDB 引擎默认的隔离级别是 RR(可反复读),因为它须要保障事务 ACID 个性中的隔离性特色。
以上就是我对这个问题的了解。
总结
对于这个问题,很多用 Mysql5 年甚至更长时间的程序员都不肯定十分分明的晓得。
这其实是不失常的,因为尽管 InnoDB 默认隔离级别能解决 99% 以上的问题,然而有些公司的某些业务可能会批改隔离级别。
而如果你不晓得,就很可能在程序中呈现莫名其妙的问题。
如果有任何面试问题、职业倒退问题、学习问题,都能够私信我。
版权申明:本博客所有文章除特地申明外,均采纳 CC BY-NC-SA 4.0 许可协定。转载请注明来自
Mic 带你学架构
!
如果本篇文章对您有帮忙,还请帮忙点个关注和赞,您的保持是我一直创作的能源。欢送关注同名微信公众号获取更多技术干货!