博客
关于我
MySQL杂谈
阅读量:789 次
发布时间:2023-02-12

本文共 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 条记录。

  • 参考资料

    转载地址:http://rndfk.baihongyu.com/

    你可能感兴趣的文章
    MYSQL批量UPDATE的两种方式
    查看>>
    mysql批量修改字段名(列名)
    查看>>
    MySQL批量插入数据遇到错误1213的解决方法
    查看>>
    mysql技能梳理
    查看>>
    MySQL报Got an error reading communication packets错
    查看>>
    Mysql报错Can‘t create/write to file ‘/tmp/#sql_3a8_0.MYD‘ (Errcode: 28 - No space left on device)
    查看>>
    MySql报错Deadlock found when trying to get lock; try restarting transaction 的问题解决
    查看>>
    MySQL报错ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘
    查看>>
    Mysql报错Packet for query is too large问题解决
    查看>>
    mysql报错级别_更改MySQL日志错误级别记录非法登陆(Access denied)
    查看>>
    Mysql报错:too many connections
    查看>>
    MySQL报错:无法启动MySQL服务
    查看>>
    mysql授权用户,创建用户名密码,授权单个数据库,授权多个数据库
    查看>>
    mysql排序查询
    查看>>
    MySQL排序的艺术:你真的懂 Order By吗?
    查看>>
    MySQL排序的艺术:你真的懂 Order By吗?
    查看>>
    Mysql推荐书籍
    查看>>
    Mysql插入数据从指定选项中随机选择、插入时间从指定范围随机生成、Navicat使用存储过程模拟插入测试数据
    查看>>
    MYSQL搜索引擎
    查看>>
    mysql操作数据表的命令_MySQL数据表操作命令
    查看>>