现实世界的业务场景需要映射到数据库世界。现实世界中的一次状态转换需要满足下面几种特性:
原子性:要么全做,要么全不做。
隔离性:两次状态的转换是互不影响的,要保证其他的状态转换不会影响到本次状态转换。
一致性:数据库的数据部分符合现实世界中的约束,我们就说符合一致性。
主要通过以下两种方法来保证数据的一致性:
持久性:意味着盖茨转换对应的数据库操作所修改的数据都应该在磁盘中保留下来,之后无论发生了什么事故,本次转换造成的影响都不应该丢失。
需要保证原子性、隔离性、一致性和持久性的一个或多个数据库操作称为事务。
事务在执行过程中有几种状态,分别是:
活动的:事务对应的数据库操作正在执行过程中时,我们就说该事务处于活动的状态。
部分提交的:当事务中的最后一个操作完成,但由于操作都在内存中执行,所造成的影响并没有刷新到磁盘。
失败的:当事务处于活动的状态或者部分提交的状态时,可能遇到了某些错误而无法继续执行,或者人为停止了当前事务的执行。
中止的:当回滚操作执行完毕后,也就是数据库恢复到执行事务之前的状态,称处于中止状态。
提交的:当一个处于部分提交的状态的事务将修改过的数据都刷新到磁盘之后,称该事务处于提交的状态。
随着事务对应的数据库操作执行到不同的阶段,事务的状态也在不断的变化,一个基本的状态转换图如下所示: