博客
关于我
MySQL 事务的面试题总结
阅读量:798 次
发布时间:2023-02-10

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

MySQL 事务深度解析

什么是事务?

事务是数据库操作的基本单位,是管理数据库一系列操作的逻辑单元。MySQL中的事务以InnoDB存储引擎为代表,能够处理复杂高并发的数据操作。

事务特性

事务在MySQL中具有以下特性:

  • 原子性(Atomic)

    要么全部执行,要么全部不执行,确保操作的完整性。

  • 一致性(Consistency)

    保持数据库的正确状态,从一个正确状态变为另一个正确状态。

  • 隔离性(Isolation)

    在事务提交前,不允许其他事务读取或修改数据。

  • 持久性(Durability)

    事务提交后,结果永久保存在数据库中。

  • MySQL 事务隔离级别

    MySQL支持四种事务隔离级别:

  • Read Uncommitted

    未提交读,可能读到未提交的数据。

  • Read Committed

    已提交读,称为不可重复读,两次读取数据可能不一致。

  • Repeatable Read

    可重复读,确保在同一事务中,数据一致性。

  • Serializable

    串行化,读写锁定整张表,性能低,常用于特殊场景。

  • 默认隔离级别为Repeatable Read。

    幻读与不可重复读

  • 不可重复读

    同一事务中,数据可能因修改而改变。

  • 幻读

    同一事务中,查询结果因新增或删除而变化。

  • 并发事务问题

    并发事务可能引发:

  • 更新丢失

    多个事务修改同一数据,可能覆盖其他事务的更新。

  • 脏读

    修改未提交前,其他事务读取脏数据。

  • 不可重复读

    数据读取结果因修改而改变。

  • 幻读

    查询结果因新增或删除而变化。

  • 解决并发问题

  • 加锁

    读取前加锁,阻止数据修改。

  • MVCC

    多版本并发控制,通过快照提供一致性读取。

  • MVCC工作原理

    InnoDB通过记录版本号,确保事务读取一致性数据。

    Repeatable Read 隔离级别下 MVCC

  • SELECT

    检查记录版本号,确保早于当前事务版本。

  • INSERT

    插入新记录,保存当前版本号。

  • DELETE

    记录删除版本号。

  • UPDATE

    新记录保存当前版本号,旧记录标记删除。

  • MySQL 事务实现原理

    基于存储引擎,InnoDB通过MVCC解决不可重复读问题,加上间隙锁解决幻读。

    设置事务隔离级别

  • 配置文件修改

    在my.cnf中设置transaction-isolation = REPEATABLE-READ。

  • 会话设置

    使用set session transaction isolation level修改隔离级别。

  • 默认为Repeatable Read。

    InnoDB 手动提交事务

    默认自动提交,set autocommit=0手动开启事务。

    autocommit=0 下操作

    手动提交,未提交数据其他连接不可见。

    手动操作事务

    使用begin、rollback、commit控制事务。


    限制时间福利

    加入作者群,与大佬交流,获取最新面试经验。添加"xiangcode",发送暗号"6000"加入!

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

    你可能感兴趣的文章
    Myeclipse常用快捷键
    查看>>
    MyEclipse更改项目名web发布名字不改问题
    查看>>
    MyEclipse用(JDBC)连接SQL出现的问题~
    查看>>
    mt-datetime-picker type="date" 时间格式 bug
    查看>>
    myeclipse的新建severlet不见解决方法
    查看>>
    MyEclipse设置当前行背景颜色、选中单词前景色、背景色
    查看>>
    Mtab书签导航程序 LinkStore/getIcon SQL注入漏洞复现
    查看>>
    myeclipse配置springmvc教程
    查看>>
    MyEclipse配置SVN
    查看>>
    MTCNN 人脸检测
    查看>>
    MyEcplise中SpringBoot怎样定制启动banner?
    查看>>
    MyPython
    查看>>
    MTD技术介绍
    查看>>
    MySQL
    查看>>
    MySQL
    查看>>
    mysql
    查看>>
    MTK Android 如何获取系统权限
    查看>>
    MySQL - 4种基本索引、聚簇索引和非聚索引、索引失效情况、SQL 优化
    查看>>
    MySQL - ERROR 1406
    查看>>
    mysql - 视图
    查看>>