事务一致性与原子性的区别

对于事务一致性的理解不是很到位。
网上大体的回答是从一个状态到另一个状态,举例也都是张三给李四转100块钱,那么保证张三和李四的总和不变就是一致性。初步判断这个举例有些牵强,例如,有一种业务逻辑,张三需要从账户中减掉100,而李四只会从账户中增加60,只要保证这两个同时成功,也叫一致性吧。
还有文章说保证开始状态和终态中的约束之类的一致,就是一致性。
总是感觉这两种解释都有些牵强,请问事务的一致性侧重点是什么,与原子性的区别在哪里,非常感谢

阅读 22.5k
4 个回答

其实一致性和原子性在事务里是两个不太相关,但又很相关的逻辑来的
原子性:这个侧重点是事务执行的完整,一套事务下来,如果有一个失败,那整体失败。也就是要么大家一起成功,要么全都回滚

一致性:这个讲的是事务是按照预期生效的,也就是你举例的那个转账的,一致性的核心一部分是靠原子性实现的,而另一部分是逻辑实现。

举个栗子吧:
转账:张三给李四转账100元。那数据库假设需要 张三扣100,李四加100,记录一条流水。
如果流水没记录成功,那整体回滚,张三也没转账成功,李四也没多钱。这就是原子性的体现。

而张三必须扣100,李四必须加100,这个就是一致性了,如果因为某些逻辑原因,导致张三扣了100,流水记录100转账,而李四只加了60。然后这3条操作都成功了,那原子性就符合了,但是一致性就不符合了~~~

其实在实际应用中肯定不是这么简单的例子的。往往是类似,买东西扣库存这类的逻辑,主表里有库存,库存表里有库存,SKU表里还有,然后就因为设计缺陷,就算加了事务还是出现了超卖、SKU库存对不上总库存的问题。。这个就是一致性不满足的了。

原子就是最小的..吗
状态1到2不存在1.5
要保证一致性必须要求不存在1.5,所以他是依赖于原子性
..
一致性这个名字我不是很理解,不过看他们的解释很符合能量能量守恒的概念

宣传栏