365充值真人注册-super365体育官网下载-365bet体育开户

事务的四大特性(ACID)

事务的四大特性(ACID)

一种说法

ACID 里的 AID 都是数据库的特征,也就是依赖数据库的具体实现。而唯独这个 C,实际上它依赖于应用层,也就是依赖于开发者。这里的一致性是指系统从一个正确的状态,迁移到另一个正确的状态。什么叫正确的状态呢?就是当前的状态满足预定的约束就叫做正确的状态。而事务具备 ACID 里 C 的特性是说通过事务的 AID 来保证我们的一致性。

举个例子:

A 要向 B 支付 100 元,而 A 的账户中只有 90 元,并且我们给定账户余额这一列的约束是,不能小于 0。那么很明显这条事务执行会失败,因为 90-100=-10,小于我们给定的约束了。

这个例子里,支付之前我们数据库里的数据都是符合约束的,但是如果事务执行成功了,我们的数据库数据就破坏约束了,因此事务不能成功,这里我们说事务提供了一致性的保证。然后我们再看个例子:

A 要向 B 支付 100 元,而 A 的账户中只有 90 元,我们的账户余额列没有任何约束。但是我们业务上不允许账户余额小于 0。因此支付完成后我们会检查 A 的账户余额,发现余额小于 0 了,于是我们进行了事务的回滚。

这个例子里,如果事务执行成功,虽然没有破坏数据库的约束,但是破坏了我们应用层的约束。而事务的回滚保证了我们的约束,因此也可以说事务提供了一致性保证(事实上,是我们应用层利用事务回滚保证了我们的约束不被破坏)。最后我们再看个例子:

A 要向 B 支付 100 元,而 A 的账户中只有 90 元,我们的账户余额列没有任何约束。然后支付成功了。

这里,如果按照很多人的理解,事务不是保证一致性么?直观上账户余额为什么能为负呢。但这里事务执行前和执行后,我们的系统没有任何的约束被破坏。一直都是保持正确的状态。

所以,综上。你可以理解一致性就是:应用系统从一个正确的状态到另一个正确的状态。而 ACID 就是说事务能够通过 AID 来保证这个 C 的过程。C 是目的,AID 都是手段。

相关推荐