MySQL, Oracle, Linux, 软件架构及大数据技术知识分享平台

网站首页 > 数据库 / 正文

MySQL进阶之InnoDB事务一致性

2024-11-26 20:03 huorong 数据库 5 ℃ 0 评论

概述

一致性是指事务执行结束后,数据库的完整性约束没有被破坏,事务执行的前后都是合法的数据状态。数据库的完整性约束包括但不限于:实体完整性(如行的主键存在且唯一)、列完整性(如字段的类型、大小、长度要符合要求)、外键约束、用户自定义完整性(如转账前后,两个账户余额的和应该不变)。

如何实现

一致性是事务追求的最终目标,前面提到的原子性、持久性和隔离性,都是为了保证数据库状态的一致性。此外,除了数据库层面的保障,一致性的实现也需要应用层面进行保障。

实现一致性的措施包括:

  • 保证原子性、持久性和隔离性,如果这些特性无法保证,事务的一致性也无法保证
  • 数据库本身提供保障,例如不允许向整形列插入字符串值、字符串长度不能超过列的限制等
  • 应用层面进行保障,例如如果转账操作只扣除转账者的余额,而没有增加接收者的余额,无论数据库实现的多么完美,也无法保证状态的一致

总结

再总结一下ACID特性及其实现原理:

  • 原子性

语句要么全执行,要么都不执行,是事务最核心的特性,事务本身就是以原子性来定义的;实现主要基于回滚日志undo log

  • 持久性

保证事务提交后不会因为宕机等原因导致数据丢失;实现主要基于重做日志redo log

  • 隔离性

保证事务执行尽可能不受其他事务影响;InnoDB默认的隔离级别是RR,RR的实现主要基于锁机制、数据的隐藏列、回滚日志undo log等保证隔离性。

  • 一致性

事务追求的最终目标,一致性的实现既需要数据库层面的保障,也需要应用层面的保障

按照严格的标准,只有同时满足ACID特性才是事务;但是在各大数据库厂商的实现中,真正满足ACID的事务少之又少。例如MySQL的NDB Cluster事务不满足持久性和隔离性;Oracle默认的事务隔离级别为READ COMMITTED,不满足隔离性。

Tags:oracle的事务

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言