MySQL实战之事务

MySQL实战之事务

前言

  1. 作为关系型数据库第一梯队的成员,MySQL的事务处理原理一直是研究的对象,今天就聊聊它

事务

  1. 事务的隔离级别
    1. 读未提交(RU)
    2. 读已提交(RC)
    3. 可重复读(RR)
    4. 串行化 (SL)
  2. 没有做对应的事务处理会发生的问题
    1. 脏读:一个事务读到了另一个事务没有提交的数据
    2. 脏写:两个事务同时修改一个值,A先改,B后改正常应该是B修改的值,但是A由于种种原因回滚了,这个时候数据就回滚到A修改之前的状态了
    3. 不可重复读:第一次读到了数据,再读没有啦,反之亦然
    4. 幻读:一样的条件,读到的数据不一致
  3. MySQL的解决方案(MVCC)
    1. ReadView
    2. Undo Log版本链
  4. 以读已提交为例进行说明
    1. 之前有提到过,一行数据包含有隐藏字段,事务id和roll_pointer, 来张图示意一下更新数据
      在这里插入图片描述
    2. 这个时候还有几个概念需要理解一下
      1. 当前事务的id, 它是随者时间递增的
      2. 现在还有哪些事务id没有提交
    3. 当一个事务读取数据时,首先生成一个快照,这个时候就知道了快照中的事务id,然后看当前除自己以外没有提交的事务id中包含不包含快照中的id,如果没有直接读取就好啦, 如果有的话说明事务还没有提交,沿着undo log版本链查看undo log,以此类推即可获取到值
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值