事务一致性与原子性的区别
对于事务一致性的理解不是很到位。
网上大体的回答是从一个状态到另一个状态,举例也都是张三给李四转100块钱,那么保证张三和李四的总和不变就是一致性。初步判断这个举例有些牵强,例如,有一种业务逻辑,张三需要从账户中减掉100,而李四只会从账户中增加60,只要保证这两个同时成功,也叫一致性吧。
还有文章说保证开始状态和终态中的约束之类的一致,就是一致性。
总是感觉这两种解释都有些牵强,请问事务的一致性侧重点是什么,与原子性的区别在哪里,非常感谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
参考了很多文章,终于搞清楚了,谢谢各位
事务隔离级别浅析
其实一致性和原子性在事务里是两个不太相关,但又很相关的逻辑来的
原子性:这个侧重点是事务执行的完整,一套事务下来,如果有一个失败,那整体失败。也就是要么大家一起成功,要么全都回滚
一致性:这个讲的是事务是按照预期生效的,也就是你举例的那个转账的,一致性的核心一部分是靠原子性实现的,而另一部分是逻辑实现。
举个栗子吧:
转账:张三给李四转账100元。那数据库假设需要 张三扣100,李四加100,记录一条流水。
如果流水没记录成功,那整体回滚,张三也没转账成功,李四也没多钱。这就是原子性的体现。
而张三必须扣100,李四必须加100,这个就是一致性了,如果因为某些逻辑原因,导致张三扣了100,流水记录100转账,而李四只加了60。然后这3条操作都成功了,那原子性就符合了,但是一致性就不符合了~~~
其实在实际应用中肯定不是这么简单的例子的。往往是类似,买东西扣库存这类的逻辑,主表里有库存,库存表里有库存,SKU表里还有,然后就因为设计缺陷,就算加了事务还是出现了超卖、SKU库存对不上总库存的问题。。这个就是一致性不满足的了。
原子就是最小的..吗
状态1到2不存在1.5
要保证一致性必须要求不存在1.5,所以他是依赖于原子性
..
一致性这个名字我不是很理解,不过看他们的解释很符合能量能量守恒的概念
可以看下https://segmentfault.com/a/1190000004437275