Spring中事务的管理

  • Post author:
  • Post category:其他


1.1 为什么要使用spring

可以保证数据的完整性。

例子: 转账为例。 张三向李四转账1000元。—-再数据库中修改两个账号的余额。


发生意外情况,则出现金庸减钱成功,而张无忌加钱失败。 如何解决?

使用事务解决问题

此时代码执行后金庸的钱没有减,张无忌的钱也没有加,问题得到解决。

数据库事务的原理 如果不写begin;commit;此时事务默认自动开启,自动提交;在数据库中 ,事务

都是自动提交的。事务的自动提交就是 执行sql语句完成之后 就立 刻持久化到 数据库中。

begin;开始事务   rollback;回滚事务   commit;提交事务

当我们添加了begin;和commit;后 事务的提交就从自动变成手动。

因为中途出错,所以导致 commit;不执行,也就是说缓冲区中的数据没有持久化的数据库中 。

1.2 什么是事务?

从开启到提交为一个事务。 由此可见,一个事务对应一组业务。一个事务 中间可以有一条sql,多条sql。 所以 一个业务开始之前 开启事务 一个业务 结束之后 提交事务。 我们这个转账案例:需要几个事务? 可以写成两个 事务,但是不合适。因为我们的需求 让张三减的同时让李四加钱。只能写 成一个事 务。 把多条sql语句当作一件事情,要同时都能执行到。

1.3 事务的特性:ACID

1、原子性(Atomicity): 事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间 环节。事务执行过程中 出错,会回滚到事务开始前的状态,所有的操作就 像没有发生一样。也就是说事务是一个不可分 割的整体,就像化学中学过 的原子,是物质构成的基本单位。

2、一致性(Consistency): 事务开始前和结束后,数据库的数据完整性约束没有被破坏,事务前后操 作数据是一致的 。比如 A向B转账,不可能A扣了钱,B却没收到。 能量守恒。

3、隔离性(Isolation): 一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数 据对并发的其他事务是 隔离的,并发执行的各个事务之间不能互相干扰。 比如A正在从一张银行卡中取钱,在A取钱的过 程结束前,B不能向这张卡 转账。 两个事务之间是有隔离级别,隔离级别的不同会导致出现不同的问 题。此时产生三种读: 脏读 幻读 不可重复读。

4、持久性(Durability): 持久性(durability)。持久性也称永久性(permanence),指一个事务 一旦提交,它对数据库 中数据的改变就应该是永久性的。接下来的其他操 作或故障不应该对其有任何影响。

1.4 事务的并发问题



版权声明:本文为Luckydogs3036原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。