事务是数据库区别于传统文件系统的重要特征。
ACID
-
A atomicity原子性
原子 性 是指 整个 数据库 事务 是 不可分 割 的 工作 单位。 只有 使 事务 中 所有 的 数据库 操作 执行 都 成功, 才算 整个 事务 成功。 如果 事务 中 任何 一个 SQL 语句 执行 失败, 那么 已经 执行 成功 的 SQL 语句 也 必须 撤销, 数据库 状态 应该 退回 到 执行 事务 前 的 状态。 -
C consistency 一致性
一致性 指 事务 将 数据库 从 一种 状态 转变 为 下一 种 一致 的 状态。 在 事务 开始 之前 和 事务 结束 以后, 数据库 的 完整性 约束 没有 被 破坏。脏读
姜承尧. MySQL技术内幕:InnoDB存储引擎 (数据库技术丛书) (Kindle 位置 4420-4421). 机械工业出版社. Kindle 版本.
-
I isolation 隔离性
一个 事务 的 影响 在 该 事务 提交 前 对其 他事 务 都不 可见—— 这 通过 锁 来 实现。 -
D durability 持久性
事务 一旦 提交, 其 结果 就是 永久 性的。 即使 发生 宕 机 等 故障, 数据库 也能 将 数据 恢复。
WAL Write-Ahead Logging
写数据前先写日志,很多其他系统也有比如hbase,druid。
事务命令
- BEGIN
- START TRANSACTION
- COMMIT
- ROLLBACK
- SAVE POINT 增加一个保存点
- RELEASE SAVEPOINT 删除一个保存点
- SET TRANSACTION 设置隔离级别
隔离级别
- read uncommit
- read commit
在 READ COMMITTED 的 事务 隔离 级别 下, 除了 唯一 性的 约束 检查 以及 外 键 约束 的 检查 需要 Gap Lock, InnoDB 存储 引擎 不会 使用 Gap Lock 的 锁 算法。 - repeatable read:next key lock解决幻读问题,锁住索引和范围
- SERIALIZABLE:
InnoDB 存储 引擎 会对 每个 SELECT 语句 后 自动 加上 LOCK IN SHARE MODE, 即 给 每个 读取 操作 加 一个 共享 锁。
XA事务
在 使用 分布式 事务 时, InnoDB 存储 引擎 的 事务 隔离 级别 必须 设置 为 SERIALIABLE。
分布式 事务 由 一个 或者 多个 资源 管理器( Resource Managers)、 一个 事务 管理器( Transaction Manager) 以及 一个 应用 程序( Application Program) 组成。
❑ 资源管理器: 提供 访问 事务 资源 的 方法。 通常 一个 数据库 就是 一个 资源 管理器。
❑ 事务管理器: 协调 参与全局事务中的各个事务。 需要和参与全局 事务中的所有资源管理器进行通信。
❑ 应用程序: 定义事务的边界, 指定全局事务中的操作。
- 分布式事务使用两段式提交( two-phase commit)的方式。
第二个 阶段:所有参与全局事务的节点都开始准备(PREPARE),告诉事务管理器它们准备好提交了
第二个 阶段:事务管理器告诉资源管理器执行 ROLLBACK 还是 COMMIT。 如果任何 一个节点显示不能提交, 则所有的节点都被告知需要回滚。
网友评论