知识卡片
事务ACID四特性的分工:一致性由应用保证,其余三个由DBMS保证
内容
ACID四个特性看起来是并列的一组要求,但保证它们的责任方并不相同, 这个分工经常被忽略。一致性指事务把数据库从一个一致性状态转换到 另一个一致性状态,但这个”正确”是由应用逻辑定义的,不是数据库管理 系统能替应用判断的——数据库管理系统只负责”要么全做要么全不做”地 执行一个事务,即使这个事务本身在业务上是错误的(比如现实中这笔 转账根本不该发生),数据库也不为这种业务逻辑错误负责,一致性的 保障责任完全在应用层。原子性、隔离性、持久性则不同,它们是数据库 管理系统必须用具体技术手段实现的系统级承诺:原子性靠日志技术 (事务失败时用日志把已做的修改撤销)保证,隔离性靠并发控制(锁、 时间戳等机制防止并发事务互相干扰)保证,持久性靠恢复技术(即使 系统崩溃也能把已提交事务的结果找回来)保证。理解这个分工的价值 在于:数据库出现”业务上不合理但事务执行成功”的情况,问题出在应用 层的一致性设计,不该归咎于数据库系统;而数据库出现”并发下数据 错乱”或”崩溃后数据丢失”,才是数据库系统本身在隔离性/持久性上的 技术责任。事务的一致性、原子性都是必需的前提条件,只有先保障了 这两者,才有可能进一步谈数据库整体的一致性。
参考来源
- 位置:《数据库原理(微课版)》第11章《事务处理技术》11.1.2节"事务的
特性"(源文件:_epub-src/index_split_007.html)
- 结论依据:原文明确"事务的一致性由应用逻辑在划分事务时保障,而不是
由数据库管理系统在接收到一个事务时决定的……即使在现实中用户的
转账操作是非法的,数据库管理系统也不需要对其非法操作负任何责任
……事务的一致性由应用逻辑保障,其他3个特性(原子性、隔离性和
持久性)由数据库管理系统采用一定的技术手段保障",因此可以推出
四特性保障责任方的分工。
- 原始内容:事务的一致性由应用逻辑保障,其他3个特性(原子性、隔离性
和持久性)由数据库管理系统采用一定的技术手段保障。例如,可以采用
日志技术保障事务的原子性。