DDIA-事务

综述

事务,是一个数据库绕不开的话题。我本人对于事务的理解,也仅仅停留在表层,应用层面也只是使用下Spring的声明式事务,对于事务,总感觉如隔了一层纱,模糊不清。借此读书机会,深入理解下事务的因果,做到知其然知其所以然。以下是暂时的理解,后期持续更新,做到熟记概念,讲的通原理,能够正确运用。
事务是个抽象的概念,是数据库提供的一种安全保障,避免了应用程序为了保障数据完整性为引入过多的复杂设计。

ACID

  • 原子性(Atomicity)
    原子性的定义特征:能够在错误时中止事务,丢弃该事务进行的所有写入变更的能力。
    原子性描述的不是并发的问题,它描述的是一个事务所做的修改,要么一起完成后提交,要么失败后事务回滚,数据库会到事务开始前的状态。
  • 一致性(Consistency)
    一致性的定义特征:对数据的一组特定陈述必须始终成立。
    一致性是被书中说凑数的,实际需要应用程序来保障。举例:比如银行转账,A和B账号都为500元,则合计1000元。一致性就是要保障在转账前后,1000元总数不变,而这需要应用程序来保障。
  • 隔离性(Isolation)
    隔离性的定义特征:隔离性是描述的并发问题,当出现竞态条件是,数据库如何处理。不同的数据库提供了不同的隔离级别来保障事务。常见的是"Read Committed",即读已提交,MySQL是"Repeatable Read",即可重复读。事务的隔离级别是实现很有意思,也是一个值得深究的话题,比如MVCC等。留坑后补。
  • 持久性(Durability)
    持久性的定义特性:事务一旦提交,数据就永久保存不会丢失。书中讨论的磁盘损坏的话题,还讨论了数据备份问题。这里的永久保存就像可靠性保障,没有100%。

隔离级别

讨论隔离级别,就需要为什么要分为不同的隔离级别,以及不同隔离级别保证的什么功能。必须要理解脏读、脏写、更新丢失、不可重复读以及幻读的概念。留坑后补吧。

参考

原文
数据库村的旺财和小强
知乎

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容