基础知识
特性
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 设置事务的隔离级别