(一)事务的隔离级别

  • 大家都知道事务有四个属性,即ACID(原子性、一致性、隔离性、持久性)。这四个里面稍微难理解点的是一致性和持久性。所谓的一致性是指:事务执行前后数据的一致性状态,例如事务执行前用户有1万元,事务回滚后用户仍应该有1万元。而这里的持久性指的是:事务在提交后结果是永久的,即使程序崩溃数据也能恢复,当然数据库的持久性指的是高可靠性,事务执行后数据保证一定写到了磁盘及备份日志,但并不是指高可用性 ,如果你强行把机器的磁盘烧了,那数据也是无法恢复的。
  • 在事务隔离性的基础上,我们对事务间的相互影响程度进行定级,即事务的隔离级别。通常事务有四种隔离级别:read uncommitted、read committed、repeatable read、serializable。
    (1)read uncommitted是最低的隔离级别,其实就如其英文名一样,处于这个级别的事务可能会读到其他事务尚未提交的数据修改,即存在脏读问题。除此之外,还存在不可重复读和幻读问题问题。
    (2)read committed是大部分数据库的默认隔离级别,它解决了脏读问题,但是仍存在不可重复读和幻读问题。
    (3)repeatable read解决了不可重复读的问题,但是仍可能存在幻读的问题。值得一提的是mysql的默认级别是repeatable read,但它却不存在幻读问题,因为mysql通过使用next-key lock技术解决了问题,即使在repeatable read级别也能完全保证事务的隔离性要求。
    (4) serializable是最为严格的隔离级别,所有事务顺序执行,实际上是通过将并行转为串行来解决事务隔离问题,无疑会降低性能。

不可重复读和幻读的区别:
不可重复读指在同一事务中多次查询同一记录(eg:select * from xx where id = 1),查询结果不一致。这主要是由于多次读期间其他事务update或delete了记录。
幻读是指在同一事务中多次进行范围查询(eg:select count(*) from xx where id > 1 and id < 100),查询结果不一致。这主要是由于多次范围查询期间其他事务insert了新数据。

(二)事务的参与者及分类

在一般的事务场景中通常有以下几个参与者:

  1. RM:用于管理系统数据资源,即通常意义上的数据库服务器等。
  2. TP monitor:主要用于分布式事务,用来协调处理多个RM的事务处理。
  3. TM:事务的管理者,负责事务界定、事务上下文传播等功能。
  4. Applacation:运行于容器中的应用程序,例如spring应用程序。

我们通常会根据RM的数量将事务分为分布式事务和局部事务(本地事务)两种。 在分布式事务中通常会存在多个不同的RM,这些RM分布在不同的系统中,相互之间通过TP monitor协调,利用两阶段提交来保障事务的ACID属性。在局部事务中一般每次数据操作只有一个RM,数据操作只需操作一个数据库,在同一个事务中不会进行多个数据库的更新。接下来我们将着重介绍局部事务的实现,毕竟分布式事务我懂的也不多

Spring事务那些事儿相关推荐

  1. Spring事务你可能不知道的事儿

    戳蓝字"CSDN云计算"关注我们哦! 1. 使用示例 2. 标签解析 3. 实现原理 4. 小结 关于事务,简单来说,就是为了保证数据完整性而存在的一种工具,其主要有四大特性:原子 ...

  2. 【面试】我是如何在面试别人Spring事务时“套路”对方的

    作者:李新杰,来自:编程新说 "中国最好面试官" 自从上次写了一篇"[面试]我是如何面试别人List相关知识的,深度有点长文"的文章后,有读者专门加我微信,说我 ...

  3. 我是如何在面试别人Spring事务时“套路”对方的

    "中国最好面试官" 自从上次写了一篇"[面试]我是如何面试别人List相关知识的"的文章后,有读者专门加我微信,说我是"中国最好面试官",这 ...

  4. Spring事务的处理流程、传播属性、及部分释疑

    目录 文章目录 一.spring事务利用AOP的拦截和处理流程 必须记住的两个要点 二.事务传播属性 三.为什么很多Exception异常必须配置在rollback-for中才有用 四.事务的传播性在 ...

  5. 聊聊我是如何在面试别人Spring事务时“套路”对方的

    戳蓝字"CSDN云计算"关注我们哦! "中国最好面试官" 我希望把面试当作是一次交流,像朋友那样,而不是像一场Q & A.但也有人觉得,我对应聘者&qu ...

  6. (转)面试必备技能:JDK动态代理给Spring事务埋下的坑!

    一.场景分析 最近做项目遇到了一个很奇怪的问题,大致的业务场景是这样的:我们首先设定两个事务,事务parent和事务child,在Controller里边同时调用这两个方法,示例代码如下: 1.场景A ...

  7. spring的事务隔离_再深一点:面试工作两不误,源码级理解Spring事务

    原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处. Spring有5种隔离级别,7种传播行为.这是面试常问的内容,也是代码中经常碰到的知识点.这些知识枯燥而且乏味,其中有些非 ...

  8. spring上下文是什么意思_Java程序员只会CRUD连Spring事务传播机制都不懂?

    AQS到底有什么用?难道就真的只是为了面试吗? 当然不是说AQS没用,如果你不是做基础架构或者中间件开发,你很难感受到AQS的威力.当然,学习很多时候,需要的是正向反馈,学了太多造火箭的东西,面试完就 ...

  9. Spring事务管理的底层逻辑—源码解析

    本文代码为spring 5.1.2 spring是如何控制事务的提交和回滚 加上@Transactional注解之后,Spring可以启到事务控制的功能了,再正式执行方法前它会做一些操作,我们来看看 ...

最新文章

  1. ArcGis10安装步骤
  2. Linux C: IO库函数,文件流缓冲,变参函数
  3. Python学习笔记(三)——条件语句、循环语句
  4. UVa 489 - Hangman Judge
  5. [秘技]解决QQ音乐超出服务区域问题
  6. java timetasker_Java网络与多线程系列之1:实现一个简单的对象池
  7. 2005年财富500强(zz)
  8. android中的Handler和Callback机制
  9. 屏幕演示讲解必备工具:虚拟教棒、屏幕画笔、ZoomIt放大屏幕、鼠标探照灯(图)
  10. 如何修改wifi密码(wifi密码怎么修改在手机上怎么修改)
  11. sip 接听后没有声音
  12. 数据库范式之间的转换 - 保持函数依赖分解与有/无损分解
  13. Git 分支管理最佳实践
  14. python-Day5-深入正则表达式--冒泡排序-时间复杂度 --常用模块学习:自定义模块--random模块:随机验证码--time datetime模块...
  15. 本科三本的计算机博士,读书中的我 从三本本科到985博士
  16. win10进行系统还原 (可以还原注册表文件 还可以清除近期卸载不了的软件)
  17. 嵌入式Linux热点分享网络(四)
  18. java的this和supper
  19. 关于vs编译器 /GZ 选项的意思
  20. 【JDY-23蓝牙模块调试】

热门文章

  1. python 人气高的项目_给大家推荐:五个Python小项目,Github上的人气很高的!
  2. java 使用三元运算符和if-else获取两个和三个数中的最大值
  3. 英语口语 week11 Tuesday
  4. 2014年考研英语一翻译知识点
  5. 新研究:长寿又健康的秘诀
  6. 高速行车12条技巧,每一条都关乎你的生命
  7. 2014科目三大路考各项目操作要求
  8. Python 中使用help()命令后如何退出
  9. 各种数据库对应的jar包、驱动类名和URL格式
  10. Lyft Level 5 Challenge 2018 - Elimination Round翻车记