Mysql的事务相关概念合集:事务四大特性、Mysql实现事务的流程、Mysql事务隔离级别,什么是MVCC、Mysql各类Log用途

Mysql事务四大特性

原子性:在一个事务中,所有操作要么一起成功要么一起失败回滚。

隔离性:事务与事务之间应当相互独立互不受干扰。

持久性:事务一旦提交数据将永久保存,数据不能因为机器故障等情况收到变更。

一致性:一致性与原子性息息相关,当数据的状态改变成另一种状态时的数据完整性要求,比如A账号有金额100,A要转帐给B50,B的账号原本50,转账成功后A只有50了,转账失败则A还是100。这系列操作是原子性操作,也遵循了数据一致性要求。

事务的执行流程

事务总体通过buffer pool、Log Buffer、undo log、redo log等机制完成,整体流程如下:

1、数据若存在与buffer pool时,则直接获取缓存池中的数据进行操作,若没有则将数据所在的页整页加载到缓存池中然后进行操作。

2、将旧值存入undo log中。

3、数据操作完毕后更新到buffer pool缓存池中。

4、生成redo log对象存入log buffer中。

5、事务提交后将会把log buffer中的redo log写入redo log文件中,此时redolog的状态为准备阶段。

6、将操作写入binlog文件中。

7、随后将redo log的状态变更为conmit。

事务隔离级别

读未提交读:在事务中会读到其他事务未提交的数据会造成脏读、不可重复读、幻读。

读已提交读:在事务中不会读取到未提交的数据,但还是存在不可重复读、幻读等问题。

读可重复读:在同一个事务中只会生成一个一致性视图,确保在同一个事务中执行同一条查询单条数据的SQL,查询出来数据是一致的,但还是存在幻读。

串行化:事务只能按顺序一个一个执行,不能并发,可解决脏读、不可重复读、幻读等问题,但是效率极低。

什么是MVCC

MVCC 多版本并发控制,主要由一致性视图以及版本链等机制组成,MVCC多版本并发控制机制主要解决并发事务中读写冲突等问题,提高数据库并发读写性能。

一致性视图是在执行select时就会生成,这个一致性视图包含了活跃事务id数组、最小活跃事务、当前事务、下一个事务ID(类似于预分配下一个事务的ID,例如当前事务的ID为1,那么下一个事务的ID就为2)。

版本链:每一条数据都会有两个隐藏的字段,一个是事务id,另一个是数据指针,这个指针指向undo log该数据上一个版本的数据。

读取数据时首先会判断SQL所查询的数据是否存在于Buffer pool中,若不存则直接查询数据库,将目标数据所在页的数据都加载到BufferPool中,然后获取该数据的事务ID若改事务ID小于一致性视图中的最小活跃事务ID,说明这个事务已经被提交了可以返回,若大于等于这个最小活跃事务ID则说明这条数据还没有被提交,就会通过数据指针,在undo log中读取这行数据上一个版本的数据,直到获取的数据事务id小于最小活跃事务ID然后返回。

Mysql 什么是redo log 、undo log、binlog、relay log

redo log:重做日志,存储已提交事务的数据,保证在出现机器故障时对已提交事务数据不丢失从而持久化,Mysql操作数据都是会将数据所在的那一页数据加载到缓存池中的,操作也是操作缓存池中的数据,操作完后不会立即刷新到磁盘,而是会将数据写入redo log中,至于缓存池中的数据时要依靠一个随机IO的线程去将缓存池数据持久化,但在缓存池中数据未持久化这个过程中,机器发生故障,就会导致缓存池数据丢失,所以才引入了read log。

undo log:主要用于事务回滚以及MVCC机制的,当事务需要回滚则会通过查询该数据最新已提交undo log进行回滚。MVCC机制中读可重复读级别在第一次执行会生成一个未提交列表,若查询出来的数据的事务id小于这个未提交列表中最小的事务id则认为当前查询到的数据是已提交的,若发现查询出来的数据所携带的事务id大于或等于未提交列表中的事务id时,则会通过数据指针,从undo log中查询到上一个版本的数据,若发现上一个版本的数据还是不小于未提交列表中的id时,就会再去差undo log,知道查询到已提交的数据。

binlog:以二进制的形式存储客户端操作Mysql的SQL语句以及数据,主要用户增量备份或主从数据同步。

relay log:Mysql 集群中,slave发起同步请求获取到数据后slave并不是直接执行sql,而是会先写入到relay log中,然后读取relay log执行SQL,执行SQL 与直接写入RelayLog两种方式显而易见,优化了数据同步的效率以及数据的持久性。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一码归一码@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值