如何实现数据库读一致性

本文探讨了如何实现数据库读一致性,通过介绍事务的特性、并发问题及隔离级别,重点阐述了MVCC(多版本并发控制)机制,包括Undo log、Read-View一致性视图以及数据查找方式,旨在解决脏读、不可重复读和幻读问题,确保数据在并发环境下的一致性。
摘要由CSDN通过智能技术生成

1 导读

数据的一致性是数据准确的重要指标,那如何实现数据的一致性呢?本文从事务特性和事务级别的角度和大家一起学习如何实现数据的读写一致性。

2 一致性

1. 数据的一致性:通常指关联数据之间的逻辑关系是否正确和完整。

举个例子:某系统实现读写分离,读数据库是写数据库的备份库,小李在系统中之前录入的学历信息是高中,经过小李努力学习,成功获得了本科学位。小李及时把信息变成成了本科,可是由于今天系统备份时间较长,小李变更信息时,数据已经开始备份。公司的 HR 通过系统查询小李信息时,发现还是本科,小李的申请被驳回。这就是数据不一致问题。

2. 数据库的一致性:是指数据库从一个一致性状态变到另一个一致性状态。这是事务的一致性的定义。

举个例子:仓库中商品 A 有 100 件,门店中商品 A 有 10 件。上午 10 点,仓库发送商品 A50 件到门店,最后仓库中有商品 A50 件,门店有商品 A60 件,这样商品的总是是不变的。不能门店收到货后,仓库的商品 A 还是 100 件,这样就出现数据库不一致问题。仓库和门店商品 A 的总数是 110 才是正确的,这就是数据库的一致性。

3 数据库事务

数据库事务 (transaction) 是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。

事务的性质:

  • 原子性 (Atomicity):事务中的全部操作在数据库中是不可分割的,要么全部完成,要么全部不执行。
  • 一致性 (Consistency):几个并行执行的事务,其执行结果必须与按某一顺序 串行执行的结果相一致。
  • 隔离性 (Isolation):事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的。
  • 持久性 (Durability): 对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障

4 并发问题

数据库在并发环境下会出现脏读、重复读和幻读问题。

1. 脏读

事务 A 读取了事务 B 未提交的数据,如果事务 B 回滚了,事务 A 读取的数据就是脏的。
举例:订单 A 需要商品 A20 件,订单 B 需要商品 A10 件。仓库中有商品 A 库存是 20 件。订单 B 先查询,发现库存够,进行扣减。在扣减的过程中,订单 A 进行查询,发现库存只有 10 个不够订单数量,抛出异常。这时候订单 B 提交失败了。库存数量又变成 20 了。这时候ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值