深入Mysql事务与锁机制原理

一:事务四大隔离级别

        大家经常用的隔离级别是RC和RR,其中我们的mysql的隔离级别默认是RR的隔离级别

RC隔离:

        读已提交的隔离级别,事务必须提交以后才能读出来,但是我们在一个方法里面可能每次读取的数据每次都是不一样的,因为另一个事务提交了数据,所以有不可重复读的问题

RR隔离:

        可以重复读数据,意思是我在自己这个事务中,我只要读过一次数据了,以后再怎么读取数据,数据的内容都是之前读取的(快照)数据一样,所以有幻读问题

二:mvcc机制原理

类似:写时复制机制,读写分离

   目的:为了读和写高并发的执行,又不需要通过加锁的机制去实现

        undo回滚日志,为什么事务没有提交,我们可以实现可以重复读的思想,因为基于undo日志实现的,每条数据都有trx_id,roll_pointer(回滚指针),当我们需要回滚日志的时候,我们会回滚一下数据,回滚指针指向上一条数据,直到事务提交了,我们才会更新数据,这样我们查到的就是提交的数据。

        注意:当我们使用可重复读的机制时候,RR隔离机制,我们读到的是之前的(快照)数据,但是我们想更改数据的时候,我们应该加锁(乐观锁,悲观锁)

对于隔离级别的选择:

        高并发的话就是用RC这种隔离级别,否则建议使用RR隔离级别,因为RR隔离级别在不同时刻数据有可能被修改,在报表需要大量数据的时候,建议使用RC隔离级别。

三:mysql执行过程

  1.首先我们提交了mysql的一条更新数据

  2.InnoDB储存引擎

        我们在使用innoDB的引擎的时候,mysql的底层还会有一个buffer pool的缓冲池的底层,假设我们更新数据,我们会先更新sql

        语句在缓冲池更新数据,但是不会立即刷新到我们的磁盘文件中去,而是会同步的顺序写我们的redo的日志文件中去

注意:我们一般默认写入redo日志就说明我们mysql的消息写成功了,但是我们真实的数据会通过IO线程通过异步的方式不经意的(随机)写入磁盘中去

  • 12
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值