
ACID性质
ACID property
定义:ACID指数据库事务正确执行的四个基本要素的缩写,包含原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)。一个支持事务的数据库系统,必须要具有这四种特性,否则在事务执行过程中无法保证数据的正确性,处理过程极可能达不到正确要求。
学科:计算机科学技术_数据库_数据库管理系统及其实现
技术
相关名词:数据库 数据库管理系统 事务
【延伸阅读】
从数据库用户的观点看,数据库中某些特定 *** 作的集合需要被认为是一个独立单元。例如,顾客认为从支票账户到储蓄账户的资金转账是一个 *** 作单元,尽管在数据库系统中这是由对支票账户资金余额的修改、对储蓄账户资金余额的修改以及对本次交易的登记等几个 *** 作组成的。显然,必须要求这些 *** 作要么全都发生,要么由于出错而全不发生。保证这一点非常重要。无论从系统的观点还是从用户的观点,都不愿意看到资金从支票账户支出而未转入储蓄账户的情况发生。
由上述问题,可以引入数据库的“事务”概念。事务是构成单一逻辑工作单元的 *** 作集合。不论有无故障,数据库系统必须保证事务的正确执行,即该事务的整个 *** 作集合完全被执行,或属于该事务的 *** 作一个也不执行。此外,数据库系统必须以一种能避免引入不一致性的方式来管理事务的并发执行。例如,假设系统中有一个资金转账事务,将一笔资金从支票账户转到储蓄账户中,假设还有一个事务是计算顾客总金额,它和上述资金转账的事务在系统中并发地执行。如果计算顾客总金额的事务在资金转账事务从支票账户支出金额之前查看支票账户余额,而在资金存入储蓄账户之后查看储蓄账户余额,并对它们进行求和,该事务就会得到不正确的结果,因为同一笔资金被重复计算了两次。所以,为了保证事务的正确执行,维护数据库的完整性,要求数据库系统维护以下事务特性:
原子性:事务的所有 *** 作在数据库中要么全部正确反映出来,要么全部不反映。
一致性:事务的隔离执行(即没有并发执行的其他事务),保持数据库的一致性。
隔离性:尽管多个事务可以并发执行,但系统必须保证,对任一对事务A和B,在A看来,B或者在A开始之前已经停止执行,或者在A完成之后开始执行。这样,每个事务都感觉不到系统中有其他事务在并发地执行。
持久性:一个事务成功完成后,它对数据库的改变必须是永久的,即使系统可能出现故障。
以上特性统称为ACID特性,他们全部是由数据库管理系统来维护的。
成功完成执行的事务称为已提交事务。已提交事务使数据库进入一个新的一致状态。未能成功完成的事务称为中止事务,中止事务必须对数据库的状态不造成影响。即中止事务对数据库所做的任何改变必须撤销。一旦中止事务造成的变更被撤销,就说明事务已回滚。如此,才能保证数据库当中的数据在经过 *** 作或
ACID 是为保证事务(transaction)是正确可靠的,所必须具备的四个特性:
以 A 给 B 转账100元为例:
MySQL事务是由 InnoDB 存储引擎实现的。
可以用如下的命令显式的开启事务:
另外,在自动提交(autocommit)模式下,我们执行的每一条 SQL 语句都是一条独立的事务;如果关闭了自动提交(autocommit)模式,则所有的 SQL 语句都在一个事务中,直到执行了 commit 或 rollback,该事务结束,同时开始了另外一个事务。
MySQL 事务的 ACID 特性靠如下机制实现:
Go 语言的 Gorm 提供了对于事务 *** 作的支持:
此外,还有嵌套事务以及手动事务等 *** 作,可以参考中文文档: learnku.com/docs/gorm/v…
@Transactional 注解必须添加在public方法上,private、protected方法上是无效的。
一般情况下,推荐将@Transactional 注解加在方法上,因为@Transactional直接加在类或者接口上,@Transactional注解会对类或者接口里面所有的public方法都有效,会影响性能。
主要如下:
原子性(Atomicity): 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;
一致性(Consistency): 执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的;
隔离性(Isolation): 并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的;
持久性(Durability): 一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)