当前位置: 首页 > 后端技术 > Java

【Java面试】请你简单说一下Mysql的事务隔离级别

时间:2023-04-02 02:10:01 Java

【Java面试】请简单说说Mysql的事务隔离级别。他不回,一直私信跟我抱怨。我说,只能怪你年少了。那个时候你不够努力,导致你现在技术水平不够。好吧,关于这个问题,看看普通人和专家的回答。普通人:Mysql有四种事务隔离级别:1.ReadCommitted2.RepeatableRead3.Serialization4.UncommittedRead这四种隔离级别的意思是我在一个不同的...也就是当我有多个事务竞争的时候,那么当我的事务并发执行并并行执行时,我的每个事务都会对数据产生影响。比如我的事务之间的一个隔离,那么通过不同的隔离级别,就可以解决所谓的幻读或者不可重复读和未提交读。然后我想起来这是最安全的一种序列化,也就是说不会有上面的幻读和不可重复读的问题。师父:那我从几个方面来回答这个问题。首先,事务隔离级别是解决多个并行事务竞争导致的数据安全问题的规范。具体来说,多重交易竞争可能会产生三种不同的现象。假设有两个事务T1/T2同时执行,T1事务可能会读取到T2事务未提交的数据,但是未提交的事务T2可能会被回滚,导致最终读取的是T1事务。现有数据产生脏读。假设同时执行两个事务T1/T2,事务T1在不同时间读取同一行数据的结果可能不同,从而产生不可重复读的问题。假设同时执行两个事务T1/T2。在事务T1执行范围查询或范围修改的过程中,事务T2插入了属于事务T1范围的数据并提交。这时查询事务T1,发现多了一条数据。数据,或者说数据在T1事务中没有被修改的事实,看起来像是错觉。这种现象称为幻读。但是在这三种现象的实际应用中,有些场景可能不接受某些现象的存在,所以SQL标准中定义了四种隔离级别,即:readuncommitted。在这种隔离级别下,可能会出现脏读、不可重复读、幻读。Readcommitted(RC),在这个隔离级别下,可能会出现不可重复读和幻读。可重复读(RR),在这个隔离级别下,可能会产生幻读序列化,在这个隔离级别下,多个并行事务被序列化执行,没有安全问题。在这四个隔离级别中,只有串行化解决了所有问题,但也意味着这个隔离级别的性能是最低的。在Mysql中,InnoDB引擎默认的隔离级别是RR(repeatableread),因为它需要保证事务ACID特性的隔离特性。以上是我对这个问题的理解。小结关于这个问题,很多使用Mysql5年以上的程序员可能都不是很清楚。这其实是不正常的,因为虽然InnoDB默认的隔离级别可以解决99%以上的问题,但是有些公司的一些业务可能会修改隔离级别。而如果你不知道,程序中很可能会出现莫名其妙的问题。有什么面试问题,职业发展问题,学习问题可以私信我。版权声明:除特别声明外,本博客所有文章均采用CCBY-NC-SA4.0许可协议。转载请注明来自Mic带你学建筑!如果本文对您有帮助,请给个关注和点赞。您的坚持是我不断创作的动力。欢迎关注同名微信公众号获取更多技术干货!