MySQL杂谈
发布日期:2025-04-17 23:50:37 浏览次数:17 分类:精选文章

本文共 1108 字,大约阅读时间需要 3 分钟。

ACID 与数据库事务

ACID(原子性、一致性、隔离性、持久性)是数据库事务管理的四个基本原则,确保数据库在高并发环境下可靠运行。这些原则尤其在InnoDB存储引擎中得到了充分体现。

ACID 分解

  • 原子性 (Atomicity)

    事务是数据库操作的最小单位,所有操作要么全部成功提交,要么全部失败回滚。
    InnoDB通过双写缓冲机制确保事务提交时数据持久化。

  • 一致性 (Consistency)

    数据库在每次提交或回滚后都保持一致性。多个表的更新操作不会导致查询看到部分更新的数据。

  • 隔离性 (Isolation)

    正在执行的事务之间隔离,互不影响。 isolation level 可以根据需求调整,平衡性能与数据一致性。

  • 持久性 (Durability)

    提交成功后,数据在系统故障或崩溃时依然保持不变。InnoDB通过双写缓冲和存储到磁盘实现持久性。


  • 读现象(脏读、不可重复读、幻读)

    读现象是由于事务并发操作带来的数据不一致问题,主要表现为:

  • 脏读 (Dirty Read)

    读到未提交的事务修改数据。只在 READ UNCOMMITTED 隔离级别下可能发生。

  • 不可重复读 (Non-Repeatable Read)

    同一个事务内,两次查询看到不同的数据。常见于 READ COMMITTED、READ UNCOMMITTED 隔离级别。

  • 幻读 (Phantom Read)

    查询结果中出现新的数据条目或失去已有数据条目。仅在 REPEATABLE READ 及以上隔离级别下可能发生。


  • 隔离级别

    InnoDB 支持四种隔离级别:

  • READ UNCOMMITTED

    最低隔离级别,允许脏读,仅适用于只读事务。

  • READ COMMITTED

    不允许脏读,但可以看到已提交的事务数据。适合需要高并发的应用。

  • REPEATABLE READ

    默认隔离级别,防止不可重复读,确保同一事务内查询结果一致。

  • SERIALIZABLE

    最高隔离级别,防止所有形式的读现象,通过严格的锁机制实现。


  • 索引与B+树

    索引是加快查询速度的关键因素,InnoDB 使用 B+树实现索引。树的高度直接影响存储效率:

  • 单行记录大小:约279字节,B+树每页存储16384字节。

  • 指针大小:InnoDB 使用 6字节或 14字节(针对大INT)存储索引指针。

  • 树的高度:高度增加提升存储能力,但降低查询速度。

    • 高度为2:存储约 95,000 条记录。
    • 高度为3:存储约 155,616 条记录。
    • 高度为4:存储约 254,899,712 条记录。

  • 参考资料

    上一篇:mysql权限
    下一篇:mysql服务无法启动的问题

    发表评论

    最新留言

    做的很好,不错不错
    [***.243.131.199]2026年06月02日 04时02分25秒