Java架构-数据库如何确保其操作被 100% 正确执行?

本文探讨了数据库为何能使人认为数据是100%准确的,关键在于其设计理念ACID(原子性、一致性、隔离性、持久性)。ACID确保了数据库事务的正确执行,防止数据错误。原子性保证事务不可分割,一致性确保最终结果正确,隔离性防止并发执行时的问题,持久性则保证数据变更的持久保存。理解ACID有助于更好地设计和使用数据库。
摘要由CSDN通过智能技术生成

我想你在使用数据库的时候,心里会假定这里面的数据都是 100% 准确的。回想一下,你在工作中有没有这样做过:

  • 有人给你反映了一个问题,说数据错了,你的自然反应是去检查代码有没有问题,而不会想到去确认数据库有没有问题?

  • 为了更快更方便地执行单元测试,你认为通过 Mock 数据加上断言(assertion)来代替数据库中实际存储的数据是完全没问题的。
    如果你这样做过,或者有过这样的看法,那你一定是在假定:数据都是 100% 准确的。

今天我们不妨来思考下,数据库为什么会使你有这样的认知?是因为数据库的开发团队对其测试到位吗?我想,真正起到决定性作用的是数据库背后的设计理念 ACID,这就是我们今天的主题。

什么是 ACID?

ACID 是原子性(Atomicity,或称“不可分割性”)、一致性(Consistency)、隔离性(Isolation,又称“独立性”)、持久性(Durability)的首字母简称。Andreas Reuter 和 TheoHärder 这两位前辈在 1983 年提出它,指出一个数据库“事务”只要满足这 4 个特性,在任何情况下数据都能保证准确。

“事务”是数据库的执行单元,除了我们平时用显式声明的 transaction 之类关键字包裹的代码外,每一条单独的 SQL,也是以事务的形式执行的。比如,当你在一条 SQL 中同时 insert 多笔数据的时候,一旦发生异常,所有的这几笔数据最终都不会被插入到目标表中,会一并撤销。

在保证达到这个效果的过程中,ACID 的四个特性分别起到了什么作用呢?

1. 原子性

一句话来概括原子性,用于保证每个事务被视为单个完整的个体,不可分割。满足原子性的事务,要么完全成功,要么完全失败,不允许存在其他中间状态。通常这点指的是我们同时执行多条 SQL 语句的时候,可以将这些 SQL 语句的生效与否捆绑到一起,以保证最终要么全部数据被更新到数据库,要么全部都不更新到数据库。我们来看一个例子。

小明让小王代购了一些东西回来,需要在微信上支付给他 1000 元。当小明输入完金额点击“确认转账”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值