事务

事务就是是几个步骤的集合。ACID四个基本属性。原子性:组成事务的几个步骤是一个整体,要么都成功,要么都失败;一致性:不管事务是成功还是失败,相关的业务处于一致的状态,事务的目的就是这个;隔离性:多个事务不能相互影响,也就是一个数据同时只能被一个事务操作,这个通常需要锁定数据库的行或者表;持久性:一旦事务完成,结果都会记录到数据库中,也就是记录到磁盘中。

明白了什么是事务,就来梳理下事务是怎么实现的。其实很简单,不管是mysql,oracle,还是其他什么数据库,都给我提供了锁(lock),回滚(rollback),提交(commit)这3个东西,使用它们就可以实现事务。另外,我们需要明白的一点是,系统跟数据库的交互都是通过数据库连接(connection)来实现的,所以每一个事务都会依赖一个connection。强烈建议大家了解下数据库连接的创建过程,其实跟网络连接很类似,底层都是一些通信协议(socket,TCP/IP,内存共享),我们不需要了解细节,但明白原理对于我们分析问题很有帮助。

作为一个JAVA程序猿,来说说JDBC事务和JTA吧。

JDBC事务,也就是一个本地事务,一台机器上,一个connection来管理事务,成功commit,失败rollback。

JTA:java事务API,支持分布式事务。我们想想,所谓分布式事务,也就是事务的几个操作在不同的机器上,要让这个事务要么rollback,要么commit,我们要做的只是让每台机器都知道事务是成功还是失败,也就是通信,每台机器都知道了事务是成功还是失败后,就可以在自己的机器上用connection来做rollback或者commit。所以,可以认为JTA是为每台机器的事务状态提供一个通知事务状态和接收事务状态的接口,有了这个接口以后,每台机器都可以知道当前事务的状态,然后利用connection来rollback或者commit。当然,JTA只是一个接口标准,他的这种功能还需要第三方来实现,记得实现完后打包成jar哦。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180611G1MEUV00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券