本文会介绍一些数据库的系统原理,比如常见的事务概念、数据库的隔离级别等。参考博客https://github.com/CyC2018
事物
事物是指满足ACID特性的一组操作,可以通过Commit提交一个事务,也可以通过Rollback进行回滚。
原子性(Atomicity)
事务被看做为最小的执行单位,要么全部执行成功,要么进行事务的回滚。可以通过日志来实现,将事务的操作记录到日志中,回滚时反向执行这些日志即可。
一致性(Consistency)
数据库在事务的执行前后保持一致。在一致性的状态下,所有的事务对一个数据的读取结果都是一致的。
隔离性(Isolation)
每个事务都是相互隔离的。
持久性(Durability)
事务一旦提交,所对数据库的修改将永久的保存在数据库当中。
隔离级别
未提交读(READ UNCOMMITTED)
事务在没有提交之前,数据对其他事务是可见的。
提交读(READ COMMITTED)
一个事务只有在提交之后数据才对其他事务可见。
可重复读(SERIALIZABLE)
保证同一个事务对一个数据的多次读取结果是相同的。
可串行读(REPEATABLE READ)
强制事务串行执行。
并发一致性问题
在并发环境下,事务的隔离性很难得到保证,因此会出现很多并发一致性的问题。
读脏数据
T1修改数据,T2读取这个数据,之后T1撤回修改,这样就会导致T1读到的数据是脏数据
不可重复读
T2读取一个数据,之后T1对这个数据进行修改,此时T2再次读取时和第一次读取的结果不一样。
幻影读
T1读取一个范围的数据,T2在这个范围内插入数据,此时T1读取的结果和第一次读取的结果不同。