java中事务特性_java事务的四大特性ACID

article/2025/10/3 3:24:30

前言

对于要把事务在实际中使用好,需要了解事务的特性。

事务的四大特性主要是:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。

一、事务的四大特性

1.1原子性(Atomicity)

原子性是指事务是一个不可分割的工作单位,事务中的操作要么全部成功,要么全部失败。比如在同一个事务中的SQL语句,要么全部执行成功,要么全部执行失败。

begin transaction;

update account set money = money-100 where name = '张三';

update account set money = money+100 where name = '李四';

commit transaction;

1.2一致性(Consistency)

官网上事务一致性的概念是:事务必须使数据库从一个一致性状态变换到另外一个一致性状态。

换一种方式理解就是:事务按照预期生效,数据的状态是预期的状态。

举例说明:张三向李四转100元,转账前和转账后的数据是正确的状态,这就叫一致性,如果出现张三转出100元,李四账号没有增加100元这就出现了数据错误,就没有达到一致性。

1.3隔离性(Isolation)

事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。

1.4持久性(Durability)

持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。

例如我们在使用JDBC操作数据库时,在提交事务方法后,提示用户事务操作完成,当我们程序执行完成直到看到提示后,就可以认定事务以及正确提交,即使这时候数据库出现了问题,也必须要将我们的事务完全执行完成,否则就会造成我们看到提示事务处理完毕,但是数据库因为故障而没有执行事务的重大错误。

二、数据库ACID的体现

2.1原子性

原子性说的是数据要么一起成功,要么一起失败,那么就有两种情况:事务提交(commit)和事务回滚(rollback)。

我们先看下事务正常提交的情况,下面我们在数据库模拟张三给李四转账成功的场景:

d64a22c62f84363ec66883dec96d010e.png

我们手动提交(commit)数据库事务之后,张三给李四转账100元的这个业务操作算是真正成功了,张三账户中少了100,李四账户中多了100。

接下来看下事务不正常的情况下:

6cd3fab811d893222b5d8ad65ca632cc.png

事务回滚之后,对于张三和李四的金额的操作都失败了,这就确保了事务的原子性。

2.2一致性

一致性主要说明的是事务的前后,数据库中的数据的状态要确保一致。

事务提交成功,那么张三账户上的余额是900元,李四账户上的余额是100元。

事务提交失败,那么张三和李四的账户的金额不变。

这说明现在在数据库的事务的控制下,确保了数据的一致性。

2.3隔离性

隔离性的体现,多个并发事务之间是隔离的。

张三给李四转账,如果事务没有提交的话,那么在另外一个session中并不能查看另外一个session未提交的数据。

cee0e4b700971a5894e1583618fb9e96.png

2.4持久性

持久性的体现就是数据一旦commit之后,那么对于数据的改变就是永久的。我们commit之后,张三的账户就永久减少了100元,李四的账户就永久增加了100元。

三、JDBC ACID的体现

我们使用JDBC连接MYSQL数据库的代码:

public class App {

public static void main(String[] args) throws ClassNotFoundException, SQLException {

/*

* 1/ 注册JDBC驱动;

* 2/ 获取连接;

* 3/ 开启事务

* 4/ 创建SQL语句;

* 5/ 执行SQL语句;

* 6/ 提交事务

* 7/ 关闭连接.

*

*/

// 1/ 注册JDBC驱动;

Class.forName("com.mysql.cj.jdbc.Driver");

String url = "jdbc:mysql://127.0.0.1:3306/tx_demo";

String user = "root";

String password = "root";

// 2/ 获取连接;

Connection conn = DriverManager.getConnection(url, user, password);

// 3/ 开启事务

conn.setAutoCommit(false);

// 4/ 创建SQL语句; 注意:实际使用account的主键,这里主要是为了方便理解。

String sql = "update account set money = money-100 where name = ?";

PreparedStatement ps = conn.prepareStatement(sql);

ps.setString(1,"张三");

// 5/ 执行SQL语句;

int rs = ps.executeUpdate();

if(rs>0) {

System.out.println("张三-扣减成功");

}

// 给李四增加金额

sql = "update account set money = money+100 where name = ?";

ps = conn.prepareStatement(sql);

ps.setString(1,"李四");

rs = ps.executeUpdate();

if(rs>0) {

System.out.println("李四-增加成功");

}

// 6/ 提交事务,更标准的写法应该拦截异常,有异常的情况下rollback();

conn.commit();

// 7/ 关闭连接.

ps.close();

conn.close();

}

}

说明:

如果代码正常运行的话,那么张三会扣减金额,李四会增加金额,这就确保的原子性;

一旦数据保存到数据库之后,数据就永久被改变了,这就是持久性;

事务前后,数据的状态也是我们所期望的状态,这就保证了数据的一致性;

如果在事务未commit的话,那么在另外一个线程发起查询请求的话,那么并不能查看到最近的数据(这里未进行编码),这就是隔离性。


http://chatgpt.dhexx.cn/article/BnvgKfHm.shtml

相关文章

Java 事务的传播性(Transactional)

前言 事务的传播性是Spring特有的概念,是基于Spring AOP技术实现的,原本的方法不具备事务的功能,运用Spring AOP的方式动态的增加了事务的功能,来确保数据库的数据的一致性。 只要开启事务的方法发生调用关系就一定存在事务的传…

Java 事务应用

一, 事务的一些基础知识简单回顾一下,讲的不是很深入,网上博客很多。 1,关于事务的四大特性:原子性、隔离性、一致性、持久性 本文不再赘述; 2,事务的隔离级别:读未提交,…

Java事务管理

事务的ACID属性:原子性(Atomicity )、一致性( Consistency )、隔离性或独立性( Isolation)和持久性(Durabilily) ACID 特性 A(原子性)事务的原子操作单元,对数据的修改,要么全部执行,要么全部不执行&#x…

java 事务级别_java事务隔离级别

事务隔离级别是由数据库系统实现的。 Java事务 1) 说到事务,不得不提的就是ACID特性,再次回顾: 原子性(atomicity):组成事务处理的语句形成了一个逻辑单元,不能只执行其中的一部分。 一致性(consistency)&#xff1a…

Java中使用事务(注解实现)

Java中使用事务(注解实现) 事务的介绍 描述: 对于一个功能实现或者业务流程,要么全做,要么全不做! 特性: ACID A - 原子性:执行的最小单位,要么全做,要么全…

JAVA的事务

要先知道什么是java中的事务? 事务: 一般是指要做的或所做的事情.专业术语是这样说的: 就是代码逻辑上的一组操作,这些操作要么全部成功,要么全部失败!举一个现实生活当中的例子: 1张三账上有2000元,李四账号也有2000元。张三要向李四转账1000元,正常来…

Java中的事务

一、事务概述 1. 什么是事务 事务是指对数据库的一系列的操作序列,数据库应用系统通过事务集来完成对数据的存取操作。 2. 事务的特性(ACID原则) 原子性(Atomicity):一个事务的操作不可分割&#xff0c…

java事务总述

文章目录 一、java事务概述1.1、java事务简述1.2、Java事务的类型1.3、java事务的特性1.4、java事务的隔离级别1.5、spring事务的传播特性1.6、spring支持的事务管理类型 二、java事物使用2.1、XML配置2.2、事务使用方式 一、java事务概述 1.1、java事务简述 1、简介 事务(TR…

Java中的事务及使用

什么是事务? 事务(Transaction),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如SQL,C或Java&am…

测试用例设计方法---等价类划分法

1 等价类划分法 1.1 定义 是把所有可能输入的数据,即程序的输入域划分策划国内若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例。方法是一种重要的、常用的黑盒测试用例设计方法。 1.1划分等价类 1&a…

02测试用例设计方法-等价类划分

等价类划分法 1)定义 是把所有可能的输入数据,即程序的输入域划分成若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例。该方法是一种重要的,常用的黑盒测试用例设计方法。使用这一方法时,完全不考虑程序的…

等价类划分用例案例设计

一、加法案例 测试要求:计算1到100的两个整数之和(包括1和100) 提示:一般是一个框输入正确的值,一个框输入错误的值,没有两个框都输入错误的值,因为更容易确定到底是哪个框出现错误的值&#x…

常见测试用例设计方法1---等价类划分

目录 一,等价类划分概念: 二,有效等价类和无效等价类: 三,划分等价类的标准 四,设计测试用例 五,以QQ密码设定规则为例使用等价类划分编写测试用例 1,分析需求,确定输…

黑盒测试方法|测试用例的设计方法--等价类划分方法

黑盒测试方法–测试用例的设计方法–等价类划分方法 目录 等价类划分方法边界值分析方法错误推测方法因果图方法判定表驱动分析方法正交实验设计方法功能图分析方法场景设计方法 等价类划分方法 一、方法简介 (1)定义 把所有可能的输入数据,即程序的…

软件测试:等价类划分举例

等价类的设计思路: 根据输入条件,确定等价类,包括有效等价类和无效等价类,建立等价类列表为每个等价类规定一个唯一的编号设计一个测试用例,使其尽可能多地覆盖尚未被覆盖的有效等价类,重复这一步&#xff…

等价类划分法-案例剖析-设计测试用例

目录 等价类划分法概念 有效等价类和无效等价类 等价类设计测试用例步骤 案例1 案例2 案例3 等价类划分法概念 等价类划分法是把所有可能的输入数据,即程序的输入数据集合划分成若干个子集即等价类,然后从每个等价类中选取少量具有代表性的数据作为…

15.3-等价类划分

目录 一、等价类划分的概念 二、使用等价类划分的原因 三、等价类划分的价值 四、相关概念 1、等价类 2、有效等价类 3、无效等价类 五、等价类划分法使用步骤 六、等价类的划分原则 1、原则1 2、原则2 3、原则3 4、原则4 5、原则5 6、原则6 七、测试用例的设计步骤 八、等价类…

软件测试用例设计 (一)等价类划分法

软件测试对于软件的重要性不言而喻,是计算机类学生毕业后的一个重要从业方向之一。 如果要从事软件测试,那么有些必备的技能还是要有的。比如,测试理论、测试工具、测试文档的编制。 今天我们就来看看最最最重要的测试理论:黑盒…

测试用例设计——等价类划分法

一、分析问题 如果我们需要对下面的这个两位数加法器设计测试用例,在测试了1+1,1+2,(-1)1和(-1)+2之后,是否有必要测试1+3&#xff0c…

等价类划分法设计用例(超详细)

等价类划分法 等价类: 1、解决了不能穷举测试的问题、控制成本、控制测试用例数量 2、数据值要明确,对文字敏感 3、依据需求将输入划分为若干个等价类,划分等价类(需求、数据特征) 等价类设计用例的难点:…