1. 什么是事务

事务就是以一种可控的方式,对资源进行的一组操作,保证了资源在事务前后,始终应处于被期待的正确的状态。比如不会受到宕机等原因的影响。事务本身,具有如下4种属性-ACID。(所以说事务是酸的ww)

原子性(A)
原子性的描述很简单,就是要么都做,要么都别做。比如转账业务,A向B转100元。首先要从A账户扣掉100,再给B的账户加上100,可能中间会出现问题,只扣A的了没给B加上,这时候就需要原子性来保证了。

一致性(C)

一致性的定义好多,我认为一致性主要是事务前后能通过一致性检查。比如转账前AB的钱总数,和转账后AB钱的总数,是不能变的。

隔离性(I)

隔离性主要指定的是事务并发执行时候的一些要求。

首先说下事务在并发条件下存在的问题。

脏读

事务甲读到了事务乙还没提交的修改。假设这个事务乙回滚了,那么事务甲读的就是脏数据,所以叫做脏读。

不可重复读

事务甲做了如下操作,读取A——干点其他事——读取A。这时候,事务乙,悄悄的提交了对A的修改。事务甲发现,两次读到的行不一样啊。因为重复读取时,数据变了,所以叫做不可重复读。

幻读

事务甲做了如下操作,按A条件查询结果集合——干点其他事——按A条件查询结果集合。事务乙,悄悄地在甲干其他事时,插入了一行符合查询条件A的数据。甲发现,第二次怎么比第一次多了一条啊。所以幻读的定义就是,同样一个事务,查询多次结果集合,结果是不同的,称为幻读,因为就像幻觉一样,数据突然变多了或变少了。

那么,如何解决这些问题呢?设计数据库的大佬们通过定义了4种不同的隔离级别,以解决这种问题。

未提交读

一个事务,可以在事务对数据进行更新,在它还没有提交时,另一个事务就可以看到这个数据。

已提交读

一个事务的更新操作,只有在提交后,另一个事务才能读到更新后的数据。这也就是解决了脏读的问题。

可重复读

保证了同一个事务,对同一数据多次查询,结果总是相同的。看名字就知道解决了不可重复读的问题。

可串行化

所有的事物,必须按照一定顺序串行执行。解决了幻读,因为串行了,所以自然所有设计到并发数据不一致的问题就解决了。

MySQL InnoDB的默认级别,是可重复读。因为事务隔离性要求越高,实现时加锁粒度越大,系统并发度越低,所以MySQL采用了可重复读这个级别。

持久性(D)

事务的持久性是说,一旦事务成功提交,更改就要被永远铭记,不能再逆转。

2. 角色与事务

  一个事务中,通常会有如下几个参与者。

  RM:负责储存管理系统数据库的资源状态

  TPM:负责分布式场景(多个RM),情况下的协调工作。

  TM:TPM的核心模块,通常采用两阶段提交方法保证分布式事务的执行。

  具体如下图所示。

  

3. Spring事务

Spring事务杂谈的更多相关文章

  1. spring事务概念理解

    1.数据并发问题 脏读 A事务读取B事务尚未提交的更新数据,并在此数据的基础上操作.如果B事务回滚,则A事务读取的数据就是错误的.即读取了脏数据或者错误数据. 不可重复组 A事务先后读取了B事务提交[ ...

  2. 【Java EE 学习 52】【Spring学习第四天】【Spring与JDBC】【JdbcTemplate创建的三种方式】【Spring事务管理】【事务中使用dbutils则回滚失败!!!??】

    一.JDBC编程特点 静态代码+动态变量=JDBC编程. 静态代码:比如所有的数据库连接池 都实现了DataSource接口,都实现了Connection接口. 动态变量:用户名.密码.连接的数据库. ...

  3. Spring事务

    1.@Transactional 只能被应用到public方法上, 对于其它非public的方法,如果标记了@Transactional也不会报错,但方法没有事务功能.@Transactional 的 ...

  4. spring事务管理器设计思想(二)

    上文见<spring事务管理器设计思想(一)> 对于第二个问题,涉及到事务的传播级别,定义如下: PROPAGATION_REQUIRED-- 如果当前没有事务,就新建一个事务.这是最常见 ...

  5. spring事务管理器设计思想(一)

    在最近做的一个项目里面,涉及到多数据源的操作,比较特殊的是,这多个数据库的表结构完全相同,由于我们使用的ibatis框架作为持久化层,为了防止每一个数据源都配置一套规则,所以重新实现了数据源,根据线程 ...

  6. Spring事务管理的三种方式

    一 .第一种:全注解声明式事务 Xml代码 复制代码 收藏代码 .<?xml version="1.0" encoding="UTF-8"?> .& ...

  7. spring 事务传播特性 和隔离级别

    事务的几种传播特性1. PROPAGATION_REQUIRED: 如果存在一个事务,则支持当前事务.如果没有事务则开启2. PROPAGATION_SUPPORTS: 如果存在一个事务,支持当前事务 ...

  8. Spring事务管理

    Spring是SSH中的管理员,负责管理其它框架,协调各个部分的工作.今天一起学习一下Spring的事务管理.Spring的事务管理分为声明式跟编程式.声明式就是在Spring的配置文件中进行相关配置 ...

  9. Spring事务传播属性

    Spring 对事务控制的支持统一在 TransactionDefinition 类中描述,该类有以下几个重要的接口方法: int getPropagationBehavior():事务的传播行为 i ...

随机推荐

  1. 从cookie中取值$.cookie()

    从cookie中取值: var userid = $.cookie("remoteuserid");例子: function delUser() {     var table = ...

  2. JavaScript 语法总结3

    1. 数组初始化可以跳着来  var s = [1,2,,,,6]; // 中间省略的元素为undefined 2. 函数定义表达式:  var f = function(args){ return ...

  3. Android Studio真机测试

    本页内容 1.真机测试好处多 2.开始吧!真机测试 1.真机测试好处多 不久前才开我的Android Studio之旅,就遇上了一个大麻烦——创建的模拟器各种运行出错.尝试了各种解决方法,都没有什么结 ...

  4. WebAPI请求(转)

    出处:http://www.cnblogs.com/babycool/p/3922738.html 继续接着上文 ASP.NET MVC学习系列(一)-WebAPI初探 来看看对于一般前台页面发起的g ...

  5. java MD5 并发

    Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护.该算法的文件号为RFC 1321(R.Rives ...

  6. UISearchDisplayController

    // // FirstViewController.swift // SearchDisplayDemo // // Created by Bruce Lee on 24/12/14. // Copy ...

  7. [LeetCode 题解]: Partition List

    Given a linked list and a value x, partition it such that all nodes less than x come before nodes gr ...

  8. visualstudio部分快捷键

    [工具快捷键] Ctrl+Shift+N: 新建项目 Ctrl+Shift+O: 打开项目 Ctrl+Shift+S: 全部保存 Shift+Alt+C: 新建类 Ctrl+Shift+A: 新建项 ...

  9. C#读取MP3文件的专辑图片和ID3V2Tag信息(带代码)

    第二次更新,后面的代码有问题,有些专辑图片读取不到.发现是PNG图片的问题.在读取的过程中调试发现,图片帧前10个字节包含了图片的格式,在有些歌曲写着JPEG的格式,数据却是PNG的.先说下思路. j ...

  10. cesium编程中级开篇

    cesium编程中级开篇 其实初级,中级并无定论,我理解的初级是根据官方教程,先学会如何部署环境,搭建hello world,使用官方提供的工具,完成一些示例, 而中级就是在这些的基础上,自己定制一些 ...