美文网首页
mysql事务

mysql事务

作者: 七海的游风 | 来源:发表于2019-02-24 19:56 被阅读3次

    事务是数据库区别于传统文件系统的重要特征。

    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) 组成。
    ❑ 资源管理器: 提供 访问 事务 资源 的 方法。 通常 一个 数据库 就是 一个 资源 管理器。
    ❑ 事务管理器: 协调 参与全局事务中的各个事务。 需要和参与全局 事务中的所有资源管理器进行通信。
    ❑ 应用程序: 定义事务的边界, 指定全局事务中的操作。

    image.png
    • 分布式事务使用两段式提交( two-phase commit)的方式。
      第二个 阶段:所有参与全局事务的节点都开始准备(PREPARE),告诉事务管理器它们准备好提交了
      第二个 阶段:事务管理器告诉资源管理器执行 ROLLBACK 还是 COMMIT。 如果任何 一个节点显示不能提交, 则所有的节点都被告知需要回滚。

    相关文章

      网友评论

          本文标题:mysql事务

          本文链接:https://www.haomeiwen.com/subject/wxbbyqtx.html