跳至内容

1. ACID特性

Q: MySQL事务有哪些特性(ACID)?

A - 原子性(Atomicity)

事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。

C - 一致性(Consistency)

指在事务开始之前和事务结束以后,数据不会被破坏。假如A账户给B账户转10块钱,不管成功与否,A和B的总金额是不变的。

I - 隔离性(Isolation)

多个事务并发访问时,事务之间是相互隔离的,即一个事务不影响其它事务运行效果。简言之,就是事务之间是井水不犯河水的。

D - 持久性(Durability)

表示事务完成以后,该事务对数据库所作的操作更改,将持久地保存在数据库之中。

Q: ACID靠什么保证?

隔离性 → 锁机制

事务的隔离性是通过数据库锁的机制实现的。

一致性 → undo log

事务的一致性由undo log来保证:

  • undo log是逻辑日志,记录了事务的insert、update、delete操作
  • 回滚的时候做相反的delete、update、insert操作来恢复数据

原子性和持久性 → redo log

事务的原子性和持久性由redo log来保证:

  • redo log被称作重做日志,是物理日志
  • 事务提交的时候,必须先将事务的所有日志写入redo log持久化
  • 到事务的提交操作才算完成
记忆技巧:undo负责回滚(一致性),redo负责重做(原子性+持久性),锁负责隔离(隔离性)。