欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > Spring面试题之事务的隔离级别

Spring面试题之事务的隔离级别

2025/4/26 10:56:59 来源:https://blog.csdn.net/qq_42454244/article/details/143625668  浏览:    关键词:Spring面试题之事务的隔离级别

Spring事务的隔离级别也是Java面试中常见的题目了。

Spring隔离级别是为了解决什么问题?

Spring隔离级别是问了解决并发事务所产生的一写问题:

  • 脏读
  • 不可重复读
  • 幻读

说到这就有朋友好奇了,什么是脏读、不可重复读和幻读啊?别急,接下来给大家介绍一下这三个的意思。

脏读

举个例子:

事务1事务2
beginbegin
update t_user set age = 18 where id = 1;事务2执行完这句话并没有提交哦!!!
select age from t_user where id = 1;//这里事务1就读到了id为1的用户年纪是18
rollback;//这是线程2做了回滚

就是一个事务中,读取到了另一个事务中未提交的数据,会在本事务中产生的数据不一致的问题。

不可重复读

举个例子:

事务1事务2
beginbegin
select age from t_user where id = 1;//我这里找到了id为1的用户年纪为18
update t_user set age = 20 where id = 1;commit;事务2执行完这句话有提交哦!!!
select age from t_user where id = 1;//我这里找到了id为1的用户年纪又变成20了

就是一个事务中,多次读取相同数据,但是读取的结果不一样,会在本事务中产生数据不一致的问题。

幻读

事务1事务2
begin;begin;
select min(age) from s_user;//假如这里查询到的是18
insert into… //这里又插入了一个年龄为16的用户
select min(age) from s_user;//这里最小的年龄就变成16了

就是一个事务中,多次对数据进行正标数据统计(读取),但是结果不一样,会在本事务中产生数据不一致的问题。

有些朋友会混淆不可重复读dud和幻读,前者只需要锁行即可,后者需要锁表。

说完了三种的情况,接下来说一下Spring的隔离级别

Spring事务的隔离级别

脏读不可重复读幻读
Read Uncommitted
Read Committed×
Repeatable Read××
Serializable×××

安全和性能

从安全的角度:
Serializable > Repeatable Read > Read Committed

从效率的角度
Read Committed > Repeatable Read > Serializable

数据库默认的隔离级别

  • MySQL
    • InnoDB 存储引擎:默认隔离级别是 可重复读(Repeatable Read)。
    • MyISAM 存储引擎:不支持事务,因此没有隔离级别。
  • Oracle
    • 默认隔离级别是 读已提交(Read Committed)。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词