ACIDmysql
ACID,是指在数据库管理系统(DBMS)中,事务(transaction)所具备的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。sql
具体举例:数据库
设想网上购物的一次交易,其付款过程至少包括如下几步数据库操做:
并发
更新客户所购商品的库存信息ide
保存客户付款信息--可能包括与银行系统的交互spa
生成订单而且保存到数据库中 .net
更新用户相关信息,例如购物数量等等 事务
正常的状况下,这些操做将顺利进行,最终交易成功,与交易相关的全部数据库信息也成功地更新。可是,若是在这一系列过程当中任何一个环节出了差错,例如在更新商品库存信息时发生异常、该顾客银行账户存款不足等,都将致使交易失败。一旦交易失败,数据库中全部信息都必须保持交易前的状态不变,好比最后一步更新用户信息时失败而致使交易失败,那么必须保证这笔失败的交易不影响数据库的状态--库存信息没有被更新、用户也没有付款,订单也没有生成。不然,数据库的信息将会一片混乱而不可预测。
数据库事务正是用来保证这种状况下交易的平稳性和可预测性的技术。 ci
而后咱们再回到实际应用中,看它是怎么工做的get
在数据库系统中,一个事务是指:由一系列数据库操做组成的一个完整的逻辑过程。例如银行转账,从原帐户扣除金额,以及向目标帐户添加金额,这两个数据库操做的总和,构成一个完整的逻辑过程,不可拆分。这个过程被称为一个事务,具备ACID特性。
原子性:一个事务(transaction)中的全部操做,要么所有完成,要么所有不完成,不会结束在中间某个环节。事务在执行过程当中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务历来没有执行过同样。
!一致性:在事务开始以前和事务结束之后,数据库的完整性限制没有被破坏。
隔离性:当两个或者多个事务并发访问(此处访问指查询和修改的操做)数据库的同一数据时所表现出的相互关系。事务隔离分为不一样级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
持久性:在事务完成之后,该事务对数据库所做的更改便持久地保存在数据库之中,而且是彻底的。