什么是事务的一致性?

事务的ACID特性

事务主要有四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持续性(Durability)
下面我们分别来介绍着几种性质。

原子性

原子性是指事务中的一系列操作,要么全做,要么全部不做。

隔离性

一个事务的执行不被另一个事务的执行干扰。

持续性

持续性也称为永久性,指一个事务一旦提交,它对数据库中数据的改变是永久性的。

一致性

上面的三个特性都非常好理解,而“一致性”就相对难以理解了。我在很多教材、博客、知乎和一些论坛上看过对“一致性”的解释,基本上都是通过举例子:银行转账的例子来说明。

其实我认为一致性是为了使计算机模拟的虚拟世界更加贴近我们的现实世界而提出来的。我们来考虑这样的一个场景:你买一瓶可乐,然后倒了100ml到杯子里面。
在这里插入图片描述
那么你的杯子里面必然是从原来一滴可乐都没的状态变成装有100ml可乐的状态,而你的可乐瓶子里面必然是少了100ml可乐。这是毋庸置疑的,因为在自然界中,我们必须遵循“质量守恒定律”。

我们再考虑一个场景:你上班挤地铁的时候,口袋里装了1000块现金,不料被小偷偷了300块钱。
在这里插入图片描述
那么你将损失了300,而小偷收入300,这是必然的。

在我们的生活中还有很多这样的例子,我们可以大开脑洞地去想一下,其实它们都是“守恒”的。然而,计算机模拟的世界可不是现实世界,而是虚拟世界,虚拟世界未必遵循这种守恒!假设我现在去ATM机转账,将我的建设银行卡的1000块钱转到中国银行的卡里去。程序可能是这样执行的:

第一步:从建设银行卡的余额里扣除1000;
第二步:然后再从中国银行的卡的余额里增加1000。

假如在第一步执行完之后服务器宕机了,那么显然第二步将无法完成,我的建设银行卡被扣了1000,但中国银行的卡却没增加,这个时候就发生了“不守恒”,我将白白损失了1000块钱。在数据库中,这就是所谓的“不一致性状态”。

可是自然界中是应该要保持“守恒”的,我们用计算机模拟现实世界也应该做到这一点,所以前人才提出了“一致性”的概念,使得计算机世界与现实世界更加贴近。那么如何实现“一致性”呢?

事实上,ACID中的AID都是为了实现C的。事务的最终目的就是为了实现“一致性”。如果转账的操作具有原子性,那么在中途出现错误的时候发生回滚,就不会出现不一致的情况,可见,“原子性”和“一致性”是紧密联系在一起的!

  • 100
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
事务一致性是指在数据库中的事务执行过程中,将数据库从一个一致的状态转变为另一个一致的状态。这意味着事务的执行不会破坏数据库中的完整性约束和业务规则。 一致性是数据库管理系统(DBMS)保证的一项重要特性,它确保了事务在执行过程中的可靠性和正确性。以下是一些理解事务一致性的关键点: 1. 原子性(Atomicity):事务要么全部执行成功,要么全部失败回滚。如果事务中的任何一部分操作失败,那么整个事务都会回滚到初始状态,确保数据的一致性。 2. 数据完整性(Data Integrity):事务执行过程中,数据库中的数据必须满足预定义的完整性约束。例如,唯一键约束、外键约束等。 3. 业务规则(Business Rules):事务执行过程中,必须遵守预定义的业务规则。这些规则可能是特定于应用程序或业务领域的,例如库存不允许负数、账户余额不允许为负等。 4. 并发控制(Concurrency Control):多个事务同时执行时,DBMS必须采取适当的并发控制机制,以确保数据的一致性。这可以通过锁定机制、多版本控制等方式实现。 5. 回滚和恢复(Rollback and Recovery):如果事务执行过程中发生错误或系统故障,DBMS必须能够回滚事务并将数据库恢复到一致的状态。 综上所述,事务一致性是指在事务执行过程中,保持数据的完整性、遵守业务规则,并通过并发控制和回滚恢复机制来确保数据库的一致性

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值