为了账号安全,请及时绑定邮箱和手机立即绑定

探秘 MySQL 多版本并发控制原理

普贤 架构师
难度中级
时长 2小时40分
学习人数
综合评分9.20
5人评价 查看评价
10.0 内容实用
8.4 简洁易懂
9.2 逻辑清晰
  • 可重复读级别,在首次快照读时生成读视图

    读已提交级别,在每次快照读时生成读视图

    查看全部
    1 采集 收起 来源:读视图

    2021-10-17

  • 串行化

    查看全部
    1 采集 收起 来源:mysql日志

    2021-07-16

  • 加锁

    https://img1.sycdn.imooc.com//64ddd7d10001e4fd11420630.jpg

    查看全部
    0 采集 收起 来源:当前读快照读

    2023-08-17

  • a

    https://img1.sycdn.imooc.com//64ddd1a500018e2011240678.jpg

    查看全部
  • 多版本并发控制原理分析 之 隐式字段

            (1) DB_TRX_ID

                a. 占用6byte

                b. 记录了创建这条记录时, 最近一次创建或修改该记录的事务id


            (2) DB_ROLL_PTR

                a. 占用7byte, 回滚指针

                b. 指向这条记录的上一个版本(存储于rollback segment回滚段里)


            (3) DB_ROW_ID

                a. 6byte, 隐含的自增ID(隐藏主键)

                b. 如果数据表没有主键, Innodb会自动以DB_ROW_ID产生一个聚簇索引.


            (4) 创建版本号

                记录了创建事务时的版本号


            (5) 删除版本号

                记录了删除事务时的版本号


            隐式字段填充过程:

                (1) 初始化数据: 

                    DB_TRX_ID : NULL, DB_ROLL_PTR : NULL, DB_ROW_ID : 1

                    此时没有事务, 所以前两个为null, row_id会自增填充.

                    属于历史记录, 存储在undo log里


                (2) 事务1 (假如修改了某字段值):

                    DB_TRX_ID : 1, DB_ROLL_PTR : 指针, DB_ROW_ID : 1

                    开启了事务, 所以回滚指针指向了上一个版本的记录.


                (3) 事务2:

                    第二个事务, DB_TRX_ID会变为最近一次的事务id, 即从1变为2. 指针指向了事务1的版本.

    查看全部
  •     1. 事务隔离级别

            (1) read uncommitted (读未提交)  导致: 脏读, 不可重复读, 幻读

            (2) read committed (读已提交)  导致: 不可重复读, 幻读

            (3) repeatable read (重复读)  导致: 幻读(MVCC, next-key-lock解决幻读)

            (4) serialiable (串行化) 



            1.1 脏读: 

                    (1) 当前事务读取到了并行的其他事务修改的数据, 这些数据还没有提交. 

                    (2) 也就是在并行事务的场景下, 不同事务之间对于数据的修改相互可见. 

                    (3) 这样读取到的数据可能就是个脏数据, 因为那个数据可能还没提交或者在回滚, 所以读到的数据不是最终确认的数据.


            1.2 不可重复读: 

                    (1) 在不同事务之间, 并行的事务进行读取数据, 这一行的数据读取到的值有可能在其他并行事务中被修改. 

                    (2) 修改之后的值有可能已经把这个值改变了. 改变之后, 事务进行的提交或者回滚, 再在当前事务里对该数据进行读取, 可能读取到的值会发生变化. 

                    (3) 这样前后两次读取到的值就是不相同了, 这就是不可重复读.


            1.3 幻读:

                    (1) 在同一个事务中前后两次读取到的数据条数不相同. 其他事务可能进行了一个插入操作. 

                    (2) 进行插入的数据, 有可能会影响到当前事务的业务逻辑. 读取到的数据行数不一样. 

                    (3) 读取到的数据像是幻影, 即幻读.

    查看全部
  • 哈哈哈哈哈哈哈哈哈哈

    查看全部
  • select @@global.tx_isolation;  // 系统隔离级别



    select @@tx_isolation; //会话隔离级别

    查看全部
  • mysql hide field

    查看全部
  • mysql log

    查看全部
    0 采集 收起 来源:mysql日志

    2022-05-06


    1. 如何查看SQL语句是否走了索引(explain)?上图所示

    2. 联合索引最左原则

    3. 区分度低的字段不适合建索引

    4. 联合索引字段个数不宜太多,充分权衡插入删除操作及DBA操作表成本

    5. 索引组合索引、少用单列索引

    6. where, on, group by, order by 后面跟着字段创建索引

    7. 创建了索引,不代表就走了索引

    查看全部
    0 采集 收起 来源:索引经验汇总

    2022-03-14

  • mysql多版本并发控制原理

    教学目标

    1、摆脱增删改查

    2、mvcc原理是什么

    3、介绍数据库的一些坑


    学习路线及重点

    1、事务隔离级别-种类、查看、设置、选择、关联

    2、通过现象引发思考-并发事务不同隔离级别的效果

    3、多版本并发控制原理

    4、mysql总结

    查看全部
    0 采集 收起 来源:课程概述

    2022-02-12

  • MySQL数据库 多版本并发控制 增删改查程序员

    MVCC原理的一些问题

    数据库的坑

    学习路线与学习重点

    通过现象引发思考 并发事务不同隔离级别的效果

    多版本并发控制原理

    mysql经验总结

    查看全部
    0 采集 收起 来源:课程概述

    2021-12-11

  • 索引

    查看全部
    0 采集 收起 来源:索引经验汇总

    2021-08-10

  • 事务

    查看全部
    0 采集 收起 来源:事务使用经验

    2021-08-10

首页上一页12下一页尾页

举报

0/150
提交
取消
课程须知
如果同学们熟悉inndb索引结构;熟悉mysql事务隔离级别,对于不同隔离级别之间的区别和使用场景有一定的认识;对事务的本质有一定理解,学习效果更佳!
老师告诉你能学到什么?
1、MySQL数据库中常说的脏读、不可重复读、幻读到底是什么意思,我们应该怎么选择数据库隔离级别。 2、MySQL是如何实现的多版本并发控制 3、索引、锁的使用技巧和应用场景 4、spring事务传播机制和MySQL数据库隔离级别是什么关系? 5、MySQL常见面试题

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!