数据库系统原理

本文会介绍一些数据库的系统原理,比如常见的事务概念、数据库的隔离级别等。参考博客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读取的结果和第一次读取的结果不同。