理解事务的一致性和原子性

前阵子学习到事务管理,关于事务的一致性和原子性一直不能很好地区分开来,到网上查阅大家讨论的内容,发现每个人都有自己不同的见解,于是我就更加晕了。无奈之下我开始认真地翻书,终于在《数据库系统概念》这本书中找到答案,加上个人的一点理解,觉得这样的解释还算是合理的,发出来与大家共享讨论。


事务:数据库应用中完成单一逻辑功能的操作集合,是一个既具有原子性又具有一致性的功能,我们要求事务不违反任何数据库的一致性约束,也就是说,如果事务启动时数据是一致的,那么当这个事务成功结束的时候数据库也应该是一致的

关于数据库的一致性这里分享一下我的理解:一致性就是数据库的数据状态符合数据库所描述的业务逻辑和规则。比如最简单的一条一致性规则,银行账户存款余额不能是负值。


适当定义不同事务是程序员的责任,事务的定义应使之能保持数据的一致性。例如资金从账户A转到B可以被定义成两个单独的程序完成,这两个程序依次执行可以保持一致性,但是这两个程序自身都不是把数据库从一个一致的状态转到一个新的一致状态,所以它们都不是事务


但是,在事务执行过程中,必要时允许暂时的不一致性,因为无论是A的取出操作在前还是B的存入操作在前,这两个操作必然有一个先后顺序,两个操作之间就会产生不一致。这种暂时的不一致虽然是必须的,但是在故障发生的时候,很可能导致问题的发生,于是这个时候我们的原子性就发挥作用了。


原子性:事务的所有操作在数据库中要么全部正确反映,要么全部不反映。所以伴随而来的就是事务管理器对各种故障的处理能力,其部分功能就是保证了事务的原子性。

原子性消除了事务在执行期间不可避免的不一致状态对事务执行前后的数据库状态的影响。


于是乎,在原子性和一致性的双重作用之下,事务就能够正确、有效地执行,实现响应的逻辑功能。

所以说原子性和一致性是有区别的,但是两者又是互补的,不能隔离开来。

你可能感兴趣的:(理解事务的一致性和原子性)