注:
概念
原子性:一个事务内的操做,要么同时成功,要么同时失败
一致性:一个事务必须使数据库从一个一致性状态变换到另外一个一致性状态
对于一致性,知乎连接中内容以下:
从这段话的理解来看,所谓一致性,即,从实际的业务逻辑上来讲,最终结果是对的、是跟程序员的所指望的结果彻底符合的
重点
一致性是基础,也是最终目的,其余三个特性(原子性、隔离性和持久性)都是为了保证一致性的
在比较简单的场景(没有高并发)下,可能会发生一些数据库崩溃等状况,这个时候,依赖于对日志的 REDO/UNDO 操做就能够保证一致性
而在比较复杂的场景(有高并发)下,可能会有不少事务并行的执行,这个时候,就极可能致使最终的结果没法保证一致性,好比(内容来自知乎连接):
即,这个时候,原子性不能保证一致性。由于从单个事务的角度看,无论是事务 1 仍是事务 2,它们都保证的原子性(单个事务内的全部操做所有成功了),但最终,它们并无保证数据库的一致性(由于从逻辑上说,帐户 A 应该增长了 200 元,而不是 100 元)
因此,为了保证并发状况下的一致性,又引入了隔离性的概念
隔离性:即事务之间感知不到彼此的存在,就好像只存在自己一个事务同样
而对于怎样实现隔离性,又涉及到了乐观锁和悲观锁的概念(这两个概念还不大懂)
小小引伸:
不考虑隔离性的时候,可能致使脏读、幻读和不可重复读的问题(这些问题,其实就是致使没法保证一致性的几种状况)
而隔离级别的概念,就是为了解决上述三个问题