课本上经常提到 ACID 的概念,人们也经常把 ACID 挂在嘴边。 但是课本上的介绍通常很抽象。ACID 具体是什么意思? 对于 A 、C 、I 、D 这四个属性中的每一个,具体的正面例子和反面离子分别是什么? acid, 课本, 意思, 嘴边
原子性( Atomicity ):事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;一致性( Consistency ):执行事务前后,数据保持一致,例如转账业务中,无论事务是否成功,转账者和收款人的总额应该是不变的;隔离性( Isolation ):并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的;持久性( Durability ):一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。🌈 这里要额外补充一点:只有保证了事务的持久性、原子性、隔离性之后,一致性才能得到保障。也就是说 A 、I 、D 是手段,C 是目的! ------ 著作权归 JavaGuide(javaguide.cn)所有 基于 MIT 协议 原文链接: https://javaguide.cn/database/mysql/mysql-questions-01.html
所谓持久性,就是数据库的定义本身吧,我写 App 的时候要用一个数据库,就是为了把数据持久化。 A 、C 、I 既然都和事务有关,可不可以说 ACID 就是,这个数据库要支持事务这个功能? 那么 couchDB 之类的,是不是就不算 ACID 的数据库?
个人认为 MySQL 里,Atomicity 是由 redo log 以及 undo log 实现的:redo log 和 Mini Transaction 可以保证执行一条语句再恢复后数据库整体的状态不会是不一致的,undo log 可以保证 redo log 恢复后把未提交的事务重新回滚。 Consistency 是数据库对显示世界建模的正确性的概念,很多时候需要再代码段实现一致性。 Isolation 是由 undo log 以及锁,间隔锁,MVCC 实现的,锁做到了基础的隔离实现。undo log 为基础的 MVCC 的 readview 保证了实现隔离性下的并发性。 Durability 是由 redo log 以及 undo log 实现的,发生故障后可以进行恢复。