• MySQL的ACID


    数据库的ACID属性耳熟能详,但是却又很容易混淆。比如MySQL哪些功能是为了实现一致性?本文笔者就带大家一起看看这个问题。

    原子性(Atomicity)

    一个事务必须被视为一个不可分割的工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚。对于一个事务来说,不可能只执行其中的一部分操作,这就是事务的原子性。

    ACID 模型的原子性方面主要涉及 InnoDB 事务。 相关的 MySQL 功能包括:

    • AutoCommit设置
    • COMMIT 语句
    • ROLLBACK 语句(涉及undo log)

    一致性(Consistency)

    数据库总是从一个一致性状态转换到下一个一致性状态。如果事务最终没有提交,该事务所做的任何修改都不会被保存到数据库中。

    ACID 模型的一致性方面主要涉及内部 InnoDB 处理以保护数据免受崩溃。 相关的 MySQL 功能包括:

    • InnoDB 双写缓冲区(Doublewrite Buffer)。

    • InnoDB 崩溃恢复(Crash Recovery)。

    隔离性(Isolation)

    通常来说,一个事务所做的修改在最终提交以前,对其他事务是不可见的。

    ACID 模型的隔离方面主要涉及 InnoDB 事务,特别是适用于每个事务的隔离级别。 相关的 MySQL 功能包括:

    • AutoCommit设置。

    • 事务隔离级别和 SET TRANSACTION 语句。

    • InnoDB 存储引擎的锁机制。 可以在 INFORMATION_SCHEMA 表和PERFORMANCE_SCHEMA的 data_locks 和 data_lock_waits 表中查看详细信息。

    持久性(Durability)

    一旦提交,事务所做的修改就会被永久保存到数据库中。此时即使系统崩溃,数据也不会丢失。

    ACID模型的持久性,涉及与特定硬件配置交互的 MySQL 软件功能。由于CPU、网络和存储设备的功能有许多可能性,因此提供具体指导方针是最复杂的。 相关的 MySQL 特性包括:

    • 双写缓冲区(Doublewrite Buffer)
    • innodb_flush_log_at_trx_commit 变量。
    • sync_binlog 变量。
    • innodb_file_per_table 变量。

    后续更新文章分别介绍ACID具体相关功能实现原理。

    参考

    • https://dev.mysql.com/doc/refman/8.0/en/mysql-acid.html
  • 相关阅读:
    编译busybox
    MySQL || 数据类型与存储引擎
    前端知识整理(1-5)
    mysql workbench常用操作
    简单实现接口自动化测试(基于python+unittest)
    Chrome Extension 介绍
    GLIBC中的Symbol Versioning
    买卖股票的最好时机(二)
    [附源码]Python计算机毕业设计SSM健身网站平台(程序+LW)
    JPA+QueryDSL
  • 原文地址:https://blog.csdn.net/Fei20140908/article/details/128018876