事务的认识需要一个相当漫长的流程,慢慢在实践中理解,然后在强化相关理论基础。
数据库中的事务:

传统的本地事务处理都是依靠数据库自身事务处理能力,而事务本身是传统关系型数据库的基石。简单来说事务就是一些满足acid特性的sql,数据库通过锁和日志实现这些机制。国内的mysql中innodb事务引擎引料众多,也有很多文章让我们深刻理解索引和事务的概念。此处简单说一下我的理解;

A:代表原子性,最好理解,要么全做,要么全不做。

C:一致性,简单来说就是你扣了50,有人就加了50(一致性本身存在好多种类,传统理解数据库是强一致性)

I:隔离性,事务之间的可见行,说起来很抽象,其实看看4中隔离性级别,做个实验,就很好理解了。比如市面上大多数数据库默认隔离性级别是读已提交数据,所以只有其他事务提交之后的更新你才能感知到。

但是这里面有个好玩,也是核心交易创建支付单用来判重用的,如果一个事务A插入一条数据,另外一个事务B插入同一条数据(主键相同),即使另外一个事务没提交,也会抱主键冲突。这个很好玩。可以实验尝试。

D:持久性,一旦提交,不会丢失。但是谁能保证一定不会丢失呢,天灾人祸。其实这一点,就是把事务日志提交持久化redo日志中,即使断电,内存中数据没有持久化到磁盘,利用redo日志恢复,咋恢复的,以前学习用的ARIES Recovery Algorithm。

jdbc中的事务

对于java 程序员而言,是不需要直接使用那些sql操作数据库的,我们使用jdbc, 每个数据库厂商都会为一些编程语言提供驱动,听起来高端,其实就是一个跟数据库通信的api ,内部通过数据库自己的协议通信。jdbc是一个标准接口,每个厂商各自实现,然后对于不同的数据库我们操作起来基本相同。架构如下图,最重要的就是这个Connection,我特地做了试验,想知道它什么东西。在msyql中show processlist 可以查看当前执行的线程,发现其实每个Connection对应一个处理线程,提交事务和回滚事务都是这个Connection处理,当然发送sql和接收结果集合都是它。所以本地事务处理还是靠数据库本身。


            jdbc驱动的架构

jdbc驱动要实现的接口都在jdk中的rt.jar中的package java.sql,idea的中的工具可以直接查看包内的类直接关系,很爽。看下图,当然还有另外一个图,是sql相关的异常,一个项目如何设置一个规范的异常体系,后期花时间总结。

spring事务处理(有待研究)

spring 的事务管理最终还是需要依赖数据库自身事务管理,但是它在业务层提供了一个很重要的功能就是事务的传播性。很好玩,一般在开发过程中,我门都是是用默认的传播机制。

分布式事务理论(有待研究)

CAP:

BASE :

一致性协议:   两阶段,三阶段,paxos方法(zookeeper基于此实现,太复杂不学),raft(号称简单而容易实现的一致性算法,准备细致的看看)

事务处理: databse jdbc mybatis spring的更多相关文章

  1. spring boot:配置shardingsphere(sharding jdbc)使用druid数据源(druid 1.1.23 / sharding-jdbc 4.1.1 / mybatis / spring boot 2.3.3)

    一,为什么要使用druid数据源? 1,druid的优点 Druid是阿里巴巴开发的号称为监控而生的数据库连接池 它的优点包括: 可以监控数据库访问性能 SQL执行日志 SQL防火墙 但spring ...

  2. mybatis+spring事务

    http://www.mybatis.org/spring/zh/transactions.html 第四章 事务 一个使用 MyBatis-Spring 的主要原因是它允许 MyBatis 参与到 ...

  3. springMVC+mybatis+spring整合案例

    1.web.xml a:配置spring监听,使web容器在启动时加载spring的applicationContext.xml <listener> <listener-class ...

  4. SpringMVC+Mybatis+Spring整合

    Maven引入需要的JAR包 pom.xml <properties> <!-- spring版本号 --> <spring.version>4.0.2.RELEA ...

  5. MyBatis学习(一)、MyBatis简介与配置MyBatis+Spring+MySql

    一.MyBatis简介与配置MyBatis+Spring+MySql 1.1MyBatis简介 MyBatis 是一个可以自定义SQL.存储过程和高级映射的持久层框架.MyBatis 摒除了大部分的J ...

  6. myBatis,Spring,SpringMVC三大框架ssm整合模板

    整合步骤 创建web工程 导入整合所需的所有jar包 编写各层需要的配置文件 1) mybatis的全局配置文件 <configuration>    <!-- 批量别名的设置 -- ...

  7. 多个mapper location时, mybatis spring的自动扫描配置

    1. MapperScannerConfigurer 里面的basePackage, 多个package用逗号分隔 2. SqlSessionFactoryBean里面的mapperLocations ...

  8. MyBatis详解 与配置MyBatis+Spring+MySql

    MyBatis 是一个可以自定义SQL.存储过程和高级映射的持久层框架.MyBatis 摒除了大部分的JDBC代码.手工设置参数和结果集重获.MyBatis 只使用简单的XML 和注解来配置和映射基本 ...

  9. Springmvc + mybatis + spring 配置,spring事物

    今天配置了半天,发现,事物不起效果,主要出现如下错误: org.mybatis.spring.transaction.SpringManagedTransaction] - [JDBC Connect ...

随机推荐

  1. sencha touch xtype

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. 基于web工作流开发

    目前在研发基于web工作流的开发 什么是工作流? 工作流简言之就是: 1.反应业务流程的计算机化的模型. 2.一类能够完全或者部分自动执行的经营过程:(为了提高效率,实现自动化). 3.任务.活动及活 ...

  3. MDM平台学习笔记

    最近和将来一段时间都会花很多时间在主数据管理平台的学习和开发上,从现在开始打算记录此过程中的知识点和学习心得,加油! 1.IBM全新的产品文档网站IBM Knowledge Center,软件硬件产品 ...

  4. VIM移动

    VIM移动   断断续续的使用VIM也一年了,会的始终都是那么几个命令,效率极低 前几个星期把Windows换成了Linux Mint,基本上也稳定了下来 就今晚,我已经下定决心开始新的VIM之旅,顺 ...

  5. 第六讲(二) Hibernate HQL查询

    HQL查询:Criteria查询对查询条件进行了面向对象封装,符合编程人员的思维方式,不过HQL(Hibernate Query Lanaguage)查询提供了更加丰富的和灵活的查询特性,因此Hibe ...

  6. JavaScript中typeof知多少?

    typeof运算符介 绍:typeof 是一个一元运算,放在一个运算数之前,运算数可以是任意类型.它返回值是一个字符串,该字符串说明运算数的类型. 你 知道下面typeof运算的结果吗? typeof ...

  7. 树&二叉树&二叉搜索树

    树&二叉树 树是由节点和边构成,储存元素的集合.节点分根节点.父节点和子节点的概念. 二叉树binary tree,则加了"二叉"(binary),意思是在树中作区分.每个 ...

  8. hdu1051(LIS | Dilworth定理)

    这题根据的Dilworth定理,链的最小个数=反链的最大长度 , 然后就是排序LIS了 链-反链-Dilworth定理 hdu1051 #include <iostream> #inclu ...

  9. UVa 699 (二叉树) The Falling Leaves

    题意: 按先序方式输入一棵二叉树,节点是带权的,左孩子在父节点的左一个单位,右孩子在父节点的右一个单位,从左到右输出相同水平位置节点之和. 分析: 做了好几道二叉树的题,代码应该也很好理解了.这里ma ...

  10. 51nod1627 瞬间移动

    打表可以看出来是组合数...妈呀为什么弄成n+m-4,n-1,m-3就错啊... //打表可以看出来是组合数...妈呀为什么弄成n+m-4,n-1,m-3就错啊... #include<cstd ...