数据库:事务概念

介绍数据库中事务这个概念

之前遇到过事务这个概念,在做pravega的时候有个名词叫做trasaction,英语不太懂,查了之后发现原来就是事务的意思,顺便再学习一下到底什么是“事务”。内容整理自百度百科

1.定义

数据库事务( transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。

2.理解

对于数据库,我们进行的操作无非就是CRUA,事务是工作的离散单位。在单用户、单数据库下执行事务比较简单,但在分布式环境下,维护多个数据库的完整性就比较复杂。一个事务再多个场地进行修改,那就需要管理机制来防止数据重写并提供同步。另外还需要具有返回失效事务的能力,提供安全保障和提供数据恢复能力。

比如,我们去银行转账,操作可以分为下面两个环节:

  1. 从第一个账户划出款项。

  2. 将款项存入第二个账户。

在这个过程中,两个环节是关联的。第一个账户划出款项必须保证正确的存入第二个账户,如果第二个环节没有完成,整个的过程都应该取消,否则就会发生丢失款项的问题。整个交易过程,可以看作是一个事物,成功则全部成功,失败则需要全部撤消,这样可以避免当操作的中间环节出现问题时,产生数据不一致的问题。

我们可以这样理解数据库事物:对数据库所做的一系列修改,在修改过程中,暂时不写入数据库,而是缓存起来,用户在自己的终端可以预览变化,直到全部修改完成,并经过检查确认无误后,一次性提交并写入数据库,在提交之前,必要的话所做的修改都可以取消。提交之后,就不能撤销,提交成功后其他用户才可以通过查询浏览数据的变化。

3.性质(ACID)

  1. 原子性(Atomicity):事务中的全部操作在数据库中是不可分割的,要么全部完成,要么全部不执行。

  2. 一致性(Consistency):几个并行执行的事务,其执行结果必须与按某一顺序 串行执行的结果相一致。

  3. 夺隔离性(Isolation):事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的。

  4. 夺持久性(Durability):对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障。

百度给的这个一致性的解释看的我很懵逼啊,于是又查询了相关资料,数据库中一致性准确定义为:

Consistency ensures that a transaction can only bring the database from one valid state to another, maintaining database invariants: any data written to the database must be valid according to all defined rules, including constraints,cascades,triggers, and any combination thereof.

一致性确保事务只能把数据库从一个有效的状态带到另一个有效的状态,保持数据库的不变性:任何写入到数据库的数据都需要按照已经定义的规则为有效的,包括约束、级联、除法器及其任意组合。

举一个例子,一个银行系统,内部在进行转账的过程中,金钱总量保持不变是其定义的规则。那么A转了100给B,就必须A-100,B+100,使其金钱总量不变,处于一个有效的状态。

0%