从一个疑问了解数据库原子性和一致性

1. 定义

  • 数据库的四大特性:原子性,一致性,隔离性和持久性。其中:
  • 原子性:指事务包含的所有操作要么全部成功,要么全部失败回滚;
  • 一致性:指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。

2. 疑问

我当时看见这两个特性就感觉很奇怪,难道原子性和一致性不是一样的吗?提交事务,原子性保证要么成功,要么失败,这样不就是很好的保证数据库的一致性了吗。当时我看见大多数人举的一致性例子就是转账问题:假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。当我我就想难道原子性不就保证了转账成功和失败吗?
其实,我上述想法是错的,但是部分错,因为,原子性确实代表一致性的部分,但不是全部。下面是我在知乎上看到的答案左轻候,感觉可以很好的解释原子性和一致性区别。

  • 原子性其实并不能保证一致性的。再多个事务并行进行的情况下,即使保证每一个事务的原子性,任然可能导致数据不一致的结果。

  • 举例:
    事务1需要将100元转入帐号A:先读取帐号A的值,然后在这个值上加上100。但是,在这两个操作之间,另一个事务2修改了帐号A的值,为它增加了100元。那么最后的结果应该是A增加了200元。但事实上,事务1最终完成后,帐号A只增加了100元,因为事务2的修改结果被事务1覆盖掉了。
    如上,保证了原子性,但是数据库的一致性没有得到保证,上述这种情况就需要数据库隔离性的保证了。

3. 数据库事务原子性、一致性是怎样实现的

https://www.zhihu.com/question/30272728/answer/132403859

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值