夕辞

事务ACID简介 | 夕辞夕辞

事务ACID简介

在学习事务的过程中,我们总会遇到ACID这四个原则,什么是ACID?以下就来简单介绍下。

以下内容摘抄自《高性能MySQL 第3版》。

 

ACID分别指:原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durability)。

 

我们还是以一个经典的银行例子来看,假如银行数据库里有两张表,储蓄卡表(savings)和信用卡表(credits),用户进行信用卡还款100元操作,那么就需要至少有以下三个操作:

1.检查储蓄账户的余额高于100元;

2.从储蓄账户的余额中减去100元;

3.在信用卡账户余额中增加100元;

 

上述三个步骤的操作必须在一个事务中,任何一个步骤失败,则必须回滚所有的步骤,所以我们如果按照事务的代码,可以有以下的步骤。

 

START TRANSACTION;
SELECT balance FROM savings WHERE customer_id = 123;
UPDATE savings SET blance = blance - 100 WHERE customer_id = 123;
UPDATE credits SET balance = balance + 100 WHERE customer_id = 123;
COMMIT;

 

可以看出来,如果都执行成功倒还好,如果执行到第四条语句时,服务器突然崩溃了,这个时候用户很可能会损失100元。

 

因此,一个运行良好的事务处理系统,必须全部具备ACID这些标准特征。以下是各个特征的解释:

 

原子性(atomicity):

一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作,这就是事务的原子性。

 

一致性(consistency):

数据库总是从一个一致性的状态转换到另外一个一致性的状态。在上面的例子中,一致性已经确保了,即使在执行第三第四条语句之间时发生崩溃,有了一致性也不会损失100元,因为事务最终没有提交,所以事务中所做的修改也不会保存到数据库中。

 

隔离性(isolation):

通常来说,一个事务所做的修改在最终提交之前,对其他事务是不可见的。

还是以上面的例子,当执行完第三条语句,第四条语句还未开始时,此时用户查询余额,会看到余额并没有减去100元,这就是隔离性。

 

持久性(durability):

一旦事务提交,那么所做的修改都会永久的保存到数据库中。

此时即使系统崩溃,修改的数据也不会丢失。持久性是有个模糊的概念,因为实际上持久性也分很多不同的级别。

有些持久性策略能够提供非常强的安全保障,而有些未必。

 

以上就是ACID的简介,至于ACID实际在数据库中的应用及实现方法,后续文章会介绍。

2019年10月11日 / /
标签:  暂无标签
回到顶部