什么是事务?

什么是事务?

2020, Sep 18    

背景

从实习开始也算是工作了两年了,但是从来没有使用过事务,原因可能是由于一直用的是MongoDB,而不是mysql,但是事物这种

事务的定义

可以将事物简单理解为,将一系列的操作整合为一个操作,这些操作只能全部都成功或者全部都执行失败。

事物的四个特性ACID

  • 原子性(Atomicity):操作这些整合的操作的时候,要当成一条操作来执行,要么全部执行,要么全部不执行,一旦其中一个操作执行失败,那么就需要将数据进行回滚,回到执行事务之前的状态。
  • 一致性(Consistency):事务的执行是让数据从一个状态转换为另外一个状态,但是对于整个数据的完整性保持稳定(比如AB两个账户相互转账,原来的总数是20000元,无论操作多少次,总数都应该还是20000元)
  • 隔离性(Isolation):事务的隔离性是指在并发环境中,并发的事务时相互隔离的,一个事务的执行不能不被其他事务干扰。不同的事务并发操作相同的数据时,每个事务都有各自完成的数据空间,即一个事务内部的操作及使用的数据对其他并发事务时隔离的,并发执行的各个事务之间不能相互干扰。
  • 持久性(Durability):一旦事务提交,那么它对数据库中的对应数据的状态的变更就会永久保存到数据库中。–即使发生系统崩溃或机器宕机等故障,只要数据库能够重新启动,那么一定能够将其恢复到事务成功结束的状态

事务的好处与事务的实例

事务分析

事务提供了一种机制,可用来将一系列数据库更改归入一个逻辑操作。更改数据库后,所做的更改可以作为一个单元进行提交或取消。事务可确保遵循原子性、一致性、隔离性和持续性(ACID)这几种属性,以使数据能够正确地提交到数据库中。 使用事务机制的好处非常明显,例如银行转账之类的交易操作中,事务有着重要的作用。事务的成功取决于事务单元帐户相互依赖的操作行为是否能全部执行成功,只要有一个操作行为失败,整个事务将失败。例如:客户A和客户B的银行账户金额都是10000元人民币,客户A需要把自己帐户中的5000元人民币转到客户B的账户上。这个过程看似简单,实际上涉及了一系列的数据库操作,可以简单地视为两步基本操作,即从客户A帐户的金额中扣除5000元人民币,以及将客户B帐户中金额添加5000元人民币。假设第1步数据库操作成功,而第二步失败的话,将导致整个操作失败,并且客户A帐户金额将被扣除5000元人民币。事务机制可以避免此类情况,以保证整个操作的完成,如果某步操作出错,之前所作的数据库操作将全部失效。