事务ACID的C到底是什么意思?

2,562 阅读2分钟

学过数据库的都知道事务有四大特性(ACID):

  • 原子性(Atomacity)
  • 一致性(Consistency)
  • 隔离性(Isolation)
  • 持久性(Durability)

可是关于ACID中C到底是什么?网上一直是众说纷纭。

该篇文章中一致性的概念,我参考MySQL官方文档的说法。链接:ACID概念 - MySQL官方文档

其他说法的话,可以看这 如何理解数据库事务中的一致性的概念?,上面有很多人都发表了自己的观点

我们看看MySQL官方文档对于一致性的概念是什么?

The database remains in a consistent state at all times — after each commit or rollback, and while transactions are in progress. If related data is being updated across multiple tables, queries see either all old values or all new values, not a mix of old and new values.

翻译一下

数据库在任何时候都保持一致性 —— 每一个的提交或回滚,包括事务进行的时候。如果多表更新相关数据,查询看到的结果要么全是旧值,要么全是新值,而不是旧值和新值的混合。

我对于这句话的理解是:当事务中有一个操作失败,所有更改过的数据全部都要回滚。

这个时候,我们就会感到疑惑,这不就是原子性的观念吗?

原子性:一个事务内的所有操作是一个整体,要么全部成功,要么全部失败

我的理解就是:

  • 原子性侧重的是事务内操作的整体性,要么全部成功,要么全部失败
  • 一致性侧重的是数据库数据的一致性,数据库的数据要么处于事务前的状态,要么处于事务后的状态

如果大家有什么自己的观点,希望能够讲一下(不要自己的理解,要结合参考资料并附上资料出处)