ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

事务特征以及隔离级别,原生Java开发的路该怎么走

2021-12-29 17:00:24  阅读:167  来源: 互联网

标签:原生 转账 事务 transaction Java 隔离 账户 操作 100



事务(Transaction),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并用形如begin transactionend transaction语句(或函数调用)来界定。事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。

举个栗子:假如A转账给B100元,第一步需要将A账户扣除100元,第二步需要将B账户增加100元,这两个操作组成了一个转账操作,假如我们在执行第一步的时候突然断电导致服务器宕机,这样就会造成A账户被扣除100元,B账户并没有相应的加钱操作,这是致命的问题,为了解决这个问题,事务就出现了,他表示第一步与第二步要么同时成功,要么同时失败,不会出现其他情况,这样就保证了转账的一致性。

这里我们设置一个转账的案例:A账户:100元;B账户:100元。

步骤:

1.开启事务

2.第二步:扣除A账户100元;

3.第三步:B账户增加100元;

4.第四步:提交事务。

事务是如何保证的呢?


这就要说到事务的几个特征:原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durability),也就是常说的ACID特性。

原子性(atomicity):知道原子是什么吗?原子在化学反应中不可分割,也就是说原子是最小单位,一个事务必须被作为一个不可分割的最小工作单员,在一个事务中,所有操作要么同时成功,要么同时不执行,对于同一个事务,永远不能出现一个操作成功,另一个操作失败的情况,这就是事务的原子性。

**一致性(consistency):数据库总是从一个一致性的状态转换到另一个一致性的状态,也就是说从一个状态改编成另一个状态,转账为例,初始状态A账户100元,

《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》

【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享

B账户0元,假设在执行了A账户的扣钱操作之后系统奔溃,导致状态的转换没有完成,因此事务不会提交,所以在数据库中数据也不会做出相应的修改。**

隔离性(isolation):这个是比较重要的一点,通常来说,一个事务在提交之前的所有操作是对其他事务不可见的,举个例子:A账户给B账户转账100元,执行了1、2步之后,突然线程被切换了,因为账号这时候账号B给账号A转50元,它查询A账户的结果还是100元,不会看到被扣除的结果,这就是事务的隔离性。

持久性(durability):这个比较好理解,就是说事务提交之后,事务中所作的所有操作都将永久保存到数据库中,就算系统奔溃,修改的数据也不会丢失。

事务的ACID特征保证了转账的准确性,不会导致金钱的丢失,但是,程序中真的要做到不丢失你的金钱是比较复杂的,所以这时候性能可能就不会那么出众了,因为程序、存储引擎会做大量的工作来保证事务的准确性。

就像锁一样,他保证了线程安全,但是降低了可用性,mysql的存储引擎有很多,有支持事务的也有不支持事务的,比如:InnoDB支持事务;MyISAM不支持事务。我们在选型的时候根据项目的需求来判断,对于一些不需要事务的查询类应用,选择MyISAM存储引擎可以获得更高的效率,如果个别操作需要事务,也可以通过lock tables语句来提供保护。

标签:原生,转账,事务,transaction,Java,隔离,账户,操作,100
来源: https://blog.csdn.net/m0_65483483/article/details/122219542

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有