JAVA中什么是事物

22 篇文章 0 订阅
11 篇文章 0 订阅

说起来事物,就跟数据库操作有关。

事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(atomicity)、一致性(consistency)、隔离性 (isolation)和持久性(durability)的缩写。

  • 事务的原子性:表示事务执行过程中的任何失败都将导致事务所做的任何修改失效。
  • 事务的一致性:表示当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态。
  • 事务的隔离性:表示在事务执行过程中对数据的修改,在事务提交之前对其他事务不可见。
  • 事务的持久性:表示已提交的数据在事务执行失败时,数据的状态都应该正确。
通俗来讲事物就是一系列原子操作单元,从数据库角度来说,事物就是一个或好几个组成的sql执行单元,状态统一改变,或者统一不改变。再通俗点就是我们操作数据库的几条sql,要么全部执行成功,要不全不成功。

1、为什么需要事物?

事物是为了解决数据安全问题。
举个小例子:银行转账问题
A账户有200元,B账户有300元,现在我们要A给B转100元,那么我们首先的操作是检查A账户是否有100元,有的话给A账户减100元,然后给B账户加100元。但是中间往往会因为不同请求操作数据库的时间顺序不一样或网络问题而造成一些问题。比如当A中扣除了100元后,这个时候因为网络问题程序中断。那么接下来B中账户并没有加上100元,那么A肯定要找我们开发人员拼命的。那么我们怎么保证两部操作要么都发生要么都不发生呢?那么我们就需要引入事物操作了,这样就保证了两部操作能够同时成功,或者同时失败,这样就保证了我们的数据安全。

2、JAVA事物类型

JAVA事物类型有三种 1、jdbc事物 2、JTA事物 3、容器事物
JDBC事物是由Connection 对象来控制的,分为自动提交事物(默认)和手动提交事物。我们将几个sql放到一个事物的时候要启用手动提交事物。
JDBC事物的缺点是事物范围局限于一个数据库连接。不可跨库操作。
JTA是一种高层的,与实现无关的,与协议无关的API,应用程序和应用服务器可以使用JTA来访问事务。JTA允许应用程序执行分布式事务处理——在两个或多个网络计算机资源上访问并且更新数据,这些数据可以分布在多个数据库上。JDBC驱动程序的JTA支持极大地增强了数据访问能力。(这个还没有看到,先这么写,以后补充)
容器事物暂时不讲

关于事物有一些理论

事物的四个特性(特性我们再刚开始已经做了介绍)
  • 原子性
  • 一致性
  • 隔离性
  • 持久性
并发情况下事物可能会发生的问题
  • 脏读
  • 不可重复读
  • 幻读
A进行update操作,B进行select操作,然后A进行回滚,这时候B的数据就是脏数据。
A进行select数据之后,B进行update数据,然后A再次进行select数据,前后两次查询的数据不一致。
A进行select数据后,B进行insert或delete符合A事物查询的操作,那么A再次select操作,发现有的记录不存在或者之前没有发现的记录。(幻影)
事物隔离级别(主要解决并发情况下的问题)
事物隔离是指不通事物之间互不影响,底层实现时用锁来实现的。
事物隔离级别分为:
  • 未提交读(Read uncommitted)基本没用
  • 已提交读(Read committed)解决脏读
  • 可重复读(Repeatable read)解决脏读和重复读
  • 可串行化(Serializable )解决所有
    (只是简单说了一下理论,实践的话要靠自己了)
    (关于分布式事物,最好也要了解一下)
  • 6
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值