mysql的ACID

102 阅读1分钟

参考链接

原子性(Atomicity)

  • 定义

一个事务中的全部操作,或者全部完成,或者全部不完成,不会结束在中间某个环节,事务在执行的过程中发送错误,会被回滚到事务的开始状态。

  • 实现原理

undo log(回滚日志),undo log 则是 事务原子性 和 隔离性实现的基础。

undo log 是 逻辑日志,记录的是执行sql的语句的逆操作(delete->insert,update->相反的update)

一致性(Consistency)

  • 定义

事务执行结束后,数据库的完整性(实体完整性-如行的主键存在且唯一,列完整性-如字段的类型,大小,长度要符合要求等)没有被破坏。

  • 实现

原子性,持久性,隔离性,都是为保证数据库状态的一致性,这些都是数据库层面的保障,也需要应用层来保证。

0、 保证原子性、持久性和隔离性,如果这些特性无法保证,事务的一致性也无法保证 0、数据库本身提供保障,例如不允许向整形列插入字符串值、字符串长度不能超过列的限制等

隔离性(Isolation)

  • 定义

隔离性是指,事务内部操作时,是彼此隔离的,并发执行的各个事务之间互不影响。

  • 实现

0、锁机制保证隔离性,

0、mvcc(多-版本-并发-控制)保证隔离性

持久性(Durability)

  • 定义

事务处理结束后,对数据修改就是永久的,即便系统故障也不会丢失。

  • 实现

利用redo log 包保证事务的 持久性,redo log 可以保证(crash recover)