ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

mysql之事务实现方式

2021-04-08 10:03:15  阅读:167  来源: 互联网

标签:事务 log 方式 undo trx mysql 数据 id


什么是MVVC

MVVC是mysql的的多版本并发控制即multi-Version Concurrency Controller,mysql的innodb引擎支持MVVC,在事务级别为RR(可重复读)和RC(读提交)生效。

工作原理
实现原理借助3个隐藏字段、undo log、read view实现

3个隐藏字段

数据库表的引擎为innodb时,都会为每行数据添加3个隐藏字段。

DB_ROW_ID:包含一个行ID,该行ID随着插入新行而增加,如果有唯一键,这个隐藏字段不会被创建。

DATA_TRX_ID:插入或更新该行的最后一个事务的事务标识符。删除在内部被视为更新,在该更新中,行中的特殊位被设置为将其标记为已删除。

DATA_ROLL_PTR:滚动指针。innodb通过这个指针找到之前的版本的数据,该行版本的数据在undo log中是以链表形式存在的。

undo log

undo log是回滚日志,它可以保证事务的原子性,也记录了数据多个事务版本。当多个事务对同一个数据进行修改时,每开启一个事务,被操作的数据会生成一条临时数据,隐藏字段DATA_TRX_ID的值为当前事务的事务id,并将这些临时数据已链表的形式存入undo log日志中,DATA_ROLL_PTR的值指向undo log链表中具体回滚的数据。undo log是逻辑日志,和redo log一样也会写入磁盘,undo log的日志的清理由具体的线程管理。

Read view

consistent read view:一致性视图,为某一时刻事务系统(trx_sys)的快照,之后的读操作根据当前事务id与快照中事务系统状态做比较,判断数据对事务的可见性。

trx_sys状态

名称 说明
rw_trx_ids x当前read view创建时还在运行的事务id列表
min_trx_id 最小事务id,rw_trx_ids中最小的id
max_trx_id 最大事务ID,当前系统中已经生成的最大事务ID+1,即下一个要生成的事务ID
creator_trx_id 当前事务id
数据可见性规则:

一行数据的trx_id = creator_trx_id,表示数据是由当前事务修改的,可见。

一行数据的trx_id < min_trx_id,表示数据在事务创建之前修改的,可见。

一行数据的trx_id >= max_trx_id,表示数据在事务创建之后修改的,不可见

一行数据的trx_id大于等于min_trx_id且小于max_trx_id,如果trx_id在rw_trx_ids列表中,表示该事务还未提前,不可见;否则可见。

隔离级别为read commited时每次读取数据都生成一个快照读,所以能看到其他事务已提交的数据;repeatable read是每次开启事务生成一个快照读。

标签:事务,log,方式,undo,trx,mysql,数据,id
来源: https://www.cnblogs.com/xiaofeiyang/p/14630807.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有