04|数据库都需要事务和MVCC吗?
彭旭
你好,我是彭旭。
想要保证数据操作的一致性、隔离性和持久性,提高数据库系统的并发性和可靠性,事务与 MVCC 是一个绕不开的话题。
不同类型的数据库对事务与 MVCC 的需求不尽相同。在深入了解不同的需求之前,我们要先来看看不同事务隔离级别下可能发生的一些数据问题。
不同事务隔离级别带来的问题
现在有一个银行账户表 u_account,这个表有 id、account_id、balance 等多个字段。基于这个表在不同的事务隔离级别与并发的情况下,我们看看会出现一些什么样的问题。
第 1 个问题是脏读。
t1 时刻:小明的账户有余额 200。事务 B 开启,向小明的账户转入 1000,事务还未提交。
t2 时刻:小明基于事务 A 查询账户,发现现在有 1200 余额。
t3 时刻:事务 B 发现转错账户了,事务回滚。小明账户余额仍然是 200。
t4 时刻:小明以为余额有 1200,消费 300,结果要么导致最后余额账户 -100,要么交易失败。
也就是说,脏读导致业务使用的可能是一个中间态的数据,以至于业务的数据出现问题。显然,如果我们的业务系统需要保障数据的准确与一致性,那就应该避免脏读。
第 2 个问题是不可重复读。
t1 时刻:事务 C 遍历用户余额表,准备每天按余额区间给用户发放利息。首先发放余额在 0 - 10000 区间的账户,select account_id, balance from u_account where balance > 0 and balance < 10000,假设发现小明余额 5000,于是给小明发了 5 毛钱利息。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
1. 不同事务隔离级别带来的问题包括脏读、不可重复读和幻读,影响数据的一致性和准确性。 2. SQL-92标准定义了4种隔离级别,每种隔离级别都有适用的场景和特点。 3. 解决脏读问题可以通过过滤未提交事务的数据,解决不可重复读问题可以采用加锁或MVCC等方式。 4. MVCC是一种解决并发访问问题的技术,通过保存数据的多个版本来实现事务的隔离和并发访问。 5. 需要根据具体需求选择合适的事务隔离级别和并发控制技术,以保证数据的一致性和准确性。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《分布式数据库从入门到实战》,新⼈⾸单¥59
《分布式数据库从入门到实战》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
精选留言
由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论