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

传统的本地事务处理都是依靠数据库自身事务处理能力,而事务本身是传统关系型数据库的基石。简单来说事务就是一些满足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. Data Flow ->> Import Column & Export Column

    这两个transformation的作用是把DT_TEXT, DT_NTEXT, DT_IMAGE类型的数据在文件系统和数据库间导出或者导入.比如把某个数据库表的image类型的字段导出到文件系统成为 ...

  2. .resources文件转.resx 文件

    最近在进行.net winform应用程序的反向工程,资源文件反向出来后都是.resources文件,工程编译和运行都没有问题,但.resources文件为二级制文件,无法在Visual Studio ...

  3. 51 nod 1006 最长公共子序列Lcs

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1006 参考博客 :http://blog.csdn.net/yysdsy ...

  4. Android模拟器使用教程

    Using the Emulator In this document Overview Android Virtual Devices and the Emulator Starting and S ...

  5. 我的ipad应用备份

    听歌: 网易云音乐,QQ音乐 摄影: CameraConnect,Replay,PhotoBooth,PhotoCollage,画中画相机,Creative Shape, 简拼,玩图,PicsArt, ...

  6. Searching in a Radius using Postgres[Marked]

    Searching in a Radius using Postgres Creating a GEO application has never been easier. You can have ...

  7. java中参数传递

    一.参数是基本类型 相当于C++传值调用,方法中的形参是实参的副本. 二.参数是类类型 类类型的参数在方法调用中,相当于C++中的传址调用.形参是实参引用同一个对象.所有形参修改则实参也修改了 三.总 ...

  8. 使用Gradle构建android应用

    介绍: 由于Android Studio使用的构建工具是Gradle,所以如果Eclipse和Android Studio想互相构建彼此的应用,必须使用Gradle. Gradle 是以 Groovy ...

  9. 为laravel5.1生产环境linux从源代码安装PHP

    laravel5.1正式发布,该版本号称是第一个LTS的版本,它对环境的要求也比较高,至少要PHP5.59以上. 现在网上找了很久,只能自己从头安装新版本的PHP yum install libmcr ...

  10. UPDATE语句中使用JOIN

    举个例子~ UPDATE e SET e.money = e.money + d.amount FROM employee e INNER JOIN ( GROUP BY empid) d ON d. ...