分布式数据库从入门到实战
彭旭
惟客数据总架构师
696 人已学习
新⼈⾸单¥59
分布式数据库从入门到实战
15
15
1.0x
00:00/00:00
登录|注册

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
立即购买
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部