MySQL 技术内幕 - InnoDB - 事务

基础知识

特性

ACID

  • Atomicity 原子性: 数据库事务是不可分割的工作单位, 要么都做, 要么都不做.
  • Consistency 一致性: 事务不会破坏事务的完整性约束. 事务将数据库从一个一致状态转变为另一个一致状态
  • Isolation 隔离性: 事务之间相互分离, 在提交之前相互不可见.
  • Durability 持久性: 事务一旦提交, 其产生的效果就是永久的

分类

  • 扁平事务
  • 带保存点的扁平事务
  • 链事务
  • 嵌套事务 (nested transactions)
  • 分布式事务

扁平事务

  • BEGIN [WORK] / START TRANSACTION开始
    • COMMIT [WORK] 成功提交
    • ROLLBACK [WORK] 回滚

带保存点的扁平事务

  • 使用 SAVE WORK 新增保存点
  • 扁平事务默认带着一个事务开始时的保存点

事务的实现

  • Isolation: 由锁实现
  • Consistency / Durability / Atomicity : 由 redo log / undo log 实现
  • undo log 保证事务的一致性, 逻辑日志, 根据每行记录进行记录
  • redo log 保证事务的原子性和持久性, 物理日志

redo log

  • 与 binlog 类似
  • redo log 是物理日志, 记录的是对数据页的更改, binlog 记录的SQL
  • redo log 是 innodb 引擎层产生的, binlog 是 MySQL 层产生的

undo log

记录的是 SQL, undo 之后底层物理文件格式可能会改变

事务 SQL

  • 事务是默认提交的, 除非使用 BEGIN / START TRANSACTION / SET autocommit = 0 关闭自动提交
  • COMMIT / ROLLBACK
  • SAVEPOINT id: 保存 save point
  • RELEASE SAVEPOINT id: 删除 save point
  • ROLLBACK TO [SAVEPOINT] id: 回滚至某一个 save point
  • SET TRANSACTION 设置事务的隔离级别

隔离级别

/2017/05/01/mysql-innodb-inner-lock/