事务的ACID特性
事务主要有四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持续性(Durability)
下面我们分别来介绍着几种性质。
原子性
原子性是指事务中的一系列操作,要么全做,要么全部不做。
隔离性
一个事务的执行不被另一个事务的执行干扰。
持续性
持续性也称为永久性,指一个事务一旦提交,它对数据库中数据的改变是永久性的。
一致性
上面的三个特性都非常好理解,而“一致性”就相对难以理解了。我在很多教材、博客、知乎和一些论坛上看过对“一致性”的解释,基本上都是通过举例子:银行转账的例子来说明。
其实我认为一致性是为了使计算机模拟的虚拟世界更加贴近我们的现实世界而提出来的。我们来考虑这样的一个场景:你买一瓶可乐,然后倒了100ml到杯子里面。
那么你的杯子里面必然是从原来一滴可乐都没的状态变成装有100ml可乐的状态,而你的可乐瓶子里面必然是少了100ml可乐。这是毋庸置疑的,因为在自然界中,我们必须遵循“质量守恒定律”。
我们再考虑一个场景:你上班挤地铁的时候,口袋里装了1000块现金,不料被小偷偷了300块钱。
那么你将损失了300,而小偷收入300,这是必然的。
在我们的生活中还有很多这样的例子,我们可以大开脑洞地去想一下,其实它们都是“守恒”的。然而,计算机模拟的世界可不是现实世界,而是虚拟世界,虚拟世界未必遵循这种守恒!假设我现在去ATM机转账,将我的建设银行卡的1000块钱转到中国银行的卡里去。程序可能是这样执行的:
第一步:从建设银行卡的余额里扣除1000;
第二步:然后再从中国银行的卡的余额里增加1000。
假如在第一步执行完之后服务器宕机了,那么显然第二步将无法完成,我的建设银行卡被扣了1000,但中国银行的卡却没增加,这个时候就发生了“不守恒”,我将白白损失了1000块钱。在数据库中,这就是所谓的“不一致性状态”。
可是自然界中是应该要保持“守恒”的,我们用计算机模拟现实世界也应该做到这一点,所以前人才提出了“一致性”的概念,使得计算机世界与现实世界更加贴近。那么如何实现“一致性”呢?
事实上,ACID中的AID都是为了实现C的。事务的最终目的就是为了实现“一致性”。如果转账的操作具有原子性,那么在中途出现错误的时候发生回滚,就不会出现不一致的情况,可见,“原子性”和“一致性”是紧密联系在一起的!
今天的文章什么是事务的一致性_什么是事务?具有哪些特性「建议收藏」分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/76255.html