我们都知道大部分数据库都支持事务操作,而事务操作最引以为傲的的就是ACID(Atomicity, Consistency, Isolation, Durability), 今天我们就来聊聊,它们都指的啥.
- A(Atomicity)原子性:按名字去理解就是不能再被分割的最小单位。在db操作中通常是值当我们对数据库多次进行写操作的时候,这些写操作要么都成功,要么都失败,不能成功一半失败一半。如果成功一半,那么我们想再次尝试就有可能将成功的部分重复执行多次,操作起来很困难。如果有失败就全部回滚,那么我们重新执行就很方便了。
- C(Consistency)一致性: 一致性指db一直处于一个“能量守恒”的状态,如转账操作,转出账户扣除了金额,转入账户一定是增加了该金额,不能一边扣了,一边没加。不同应用对一致性的定义可能不同,这也说明了这个一致性其实是一个应用层面的定义,它是通过A和D来保证的。
- I(Isolation)隔离性: 我们的db可能同时被多个客户端来连接访问,如果我们写了一半的数据被其他客户端看到就不好了,所以隔离性就是保证每个人写一半的数据不会被另外的人看到。
- D(Durability)持久性: 持久性就是保证只有提交成功了就一定是写成功了。这个是有redo log来保证的,每次写db之前都会先写redo log,然后写db,这样即使写db报错了,我们还是可以通过redo log来重写的。 但其实这也不能完全保证持久性,如果redo log所在的磁盘坏了,那可能就无法恢复了。