前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring事务的隔离级别

Spring事务的隔离级别

作者头像
用户4919348
发布2019-04-02 11:10:35
1.1K0
发布2019-04-02 11:10:35
举报
文章被收录于专栏:波波烤鸭

  上篇文章给大家详细的介绍Spring中事务的传播行为,在事务中我们需要关注事务的传播行为和事务的隔离级别这两个点,所以本文给大家介绍下事务的隔离级别

事务的隔离级别

  事务隔离级别指的是一个事务对数据的修改与另一个并行的事务的隔离程度,当多个事务同时访问相同数据时,如果没有采取必要的隔离机制,就可能发生以下问题:

问题

描述

脏读

一个事务读到另一个事务未提交的更新数据

幻读

是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。 同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象 发生了幻觉一样。

不可重复读

比方说在同一个事务中先后执行两条一模一样的select语句,期间在此次事务中没有执行过任何DDL语句,但先后得到的结果不一致,这就是不可重复读

Spring支持的隔离级别

隔离级别

描述

DEFAULT

使用数据库本身使用的隔离级别 ORACLE(读已提交) MySQL(可重复读)

READ_UNCOMITTED

读未提交(脏读)最低的隔离级别,一切皆有可能。

READ_COMMITED

读已提交,ORACLE默认隔离级别,有幻读以及不可重复读风险。

REPEATABLE_READ

可重复读,解决不可重复读的隔离级别,但还是有幻读风险。

Spring设置事务隔离级别

配置文件的方式

代码语言:javascript
复制
 <tx:advice id="advice" transaction-manager="transactionManager">
 	<tx:attributes>
 		<tx:method name="fun*" propagation="REQUIRED" isolation="DEFAULT"/>
 	</tx:attributes>
 </tx:advice>

注解的方式

代码语言:javascript
复制
@Transactional(isolation=Isolation.DEFAULT)
public void fun(){
	dao.add();
	dao.udpate();
}

总结

  Spring建议的是使用DEFAULT,就是数据库本身的隔离级别,配置好数据库本身的隔离级别,无论在哪个框架中读写数据都不用操心了。而且万一Spring没有把这几种隔离级别实现的很完善,出了问题就麻烦了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年02月23日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 事务的隔离级别
  • Spring支持的隔离级别
  • Spring设置事务隔离级别
    • 配置文件的方式
      • 注解的方式
      • 总结
      相关产品与服务
      数据库
      云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档