综述
事务,是一个数据库绕不开的话题。我本人对于事务的理解,也仅仅停留在表层,应用层面也只是使用下Spring的声明式事务,对于事务,总感觉如隔了一层纱,模糊不清。借此读书机会,深入理解下事务的因果,做到知其然知其所以然。以下是暂时的理解,后期持续更新,做到熟记概念,讲的通原理,能够正确运用。
事务是个抽象的概念,是数据库提供的一种安全保障,避免了应用程序为了保障数据完整性为引入过多的复杂设计。
ACID
- 原子性(Atomicity)
原子性的定义特征:能够在错误时中止事务,丢弃该事务进行的所有写入变更的能力。
原子性描述的不是并发的问题,它描述的是一个事务所做的修改,要么一起完成后提交,要么失败后事务回滚,数据库会到事务开始前的状态。 - 一致性(Consistency)
一致性的定义特征:对数据的一组特定陈述必须始终成立。
一致性是被书中说凑数的,实际需要应用程序来保障。举例:比如银行转账,A和B账号都为500元,则合计1000元。一致性就是要保障在转账前后,1000元总数不变,而这需要应用程序来保障。 - 隔离性(Isolation)
隔离性的定义特征:隔离性是描述的并发问题,当出现竞态条件是,数据库如何处理。不同的数据库提供了不同的隔离级别来保障事务。常见的是"Read Committed",即读已提交,MySQL是"Repeatable Read",即可重复读。事务的隔离级别是实现很有意思,也是一个值得深究的话题,比如MVCC等。留坑后补。 - 持久性(Durability)
持久性的定义特性:事务一旦提交,数据就永久保存不会丢失。书中讨论的磁盘损坏的话题,还讨论了数据备份问题。这里的永久保存就像可靠性保障,没有100%。
隔离级别
讨论隔离级别,就需要为什么要分为不同的隔离级别,以及不同隔离级别保证的什么功能。必须要理解脏读、脏写、更新丢失、不可重复读以及幻读的概念。留坑后补吧。
网友评论