网站首页 > 数据库 / 正文
概述
一致性是指事务执行结束后,数据库的完整性约束没有被破坏,事务执行的前后都是合法的数据状态。数据库的完整性约束包括但不限于:实体完整性(如行的主键存在且唯一)、列完整性(如字段的类型、大小、长度要符合要求)、外键约束、用户自定义完整性(如转账前后,两个账户余额的和应该不变)。
如何实现
一致性是事务追求的最终目标,前面提到的原子性、持久性和隔离性,都是为了保证数据库状态的一致性。此外,除了数据库层面的保障,一致性的实现也需要应用层面进行保障。
实现一致性的措施包括:
- 保证原子性、持久性和隔离性,如果这些特性无法保证,事务的一致性也无法保证
- 数据库本身提供保障,例如不允许向整形列插入字符串值、字符串长度不能超过列的限制等
- 应用层面进行保障,例如如果转账操作只扣除转账者的余额,而没有增加接收者的余额,无论数据库实现的多么完美,也无法保证状态的一致
总结
再总结一下ACID特性及其实现原理:
- 原子性
语句要么全执行,要么都不执行,是事务最核心的特性,事务本身就是以原子性来定义的;实现主要基于回滚日志undo log
- 持久性
保证事务提交后不会因为宕机等原因导致数据丢失;实现主要基于重做日志redo log
- 隔离性
保证事务执行尽可能不受其他事务影响;InnoDB默认的隔离级别是RR,RR的实现主要基于锁机制、数据的隐藏列、回滚日志undo log等保证隔离性。
- 一致性
事务追求的最终目标,一致性的实现既需要数据库层面的保障,也需要应用层面的保障
按照严格的标准,只有同时满足ACID特性才是事务;但是在各大数据库厂商的实现中,真正满足ACID的事务少之又少。例如MySQL的NDB Cluster事务不满足持久性和隔离性;Oracle默认的事务隔离级别为READ COMMITTED,不满足隔离性。
Tags:oracle的事务
猜你喜欢
- 2024-11-26 Spring事务注解@Transactional相关
- 2024-11-26 从一个报错来看分布式事务和2PC协议两个重要视图
- 2024-11-26 深入学习MySQL事务:ACID特性的实现原理「转」
- 2024-11-26 MySql事务及ACID实现的原理
- 2024-11-26 MySQL专题2: 事务和锁
- 2024-11-26 字节跳动表格存储中的事务
- 2024-11-26 一文说尽MySQL事务及ACID特性的实现原理
- 2024-11-26 一篇文章让你读懂 Spring 事务
- 2024-11-26 MySQL事务详解
- 2024-11-26 面试必问的Mysql事务和锁,你真的了解吗?