Mysql事务的实现原理
事务理论概述:https://blog.csdn.net/hla199106/article/details/48348261
MySQL 是一个支持多引擎的系统,但并不是所有的引擎都支持事务。比如 MySQL 原生的 MyISAM 引擎就不支持事务,这也是 MyISAM 被 InnoDB 取代的重要原因之一。
4个隔离级别:read uncommited ,read commited ,repeatable read ,serializable 。
数据库里面会创建一个视图,访问的时候以视图的逻辑结果为准
“可重复读”隔离级别下,这个视图是在事务启动时创建的,整个事务存在期间都用这个视图
“读提交”隔离级别下,这个视图是在每个 SQL语句开始执行的时候创建的
“读未提交”隔离级别下直接返回记录上的最新值,没有视图概念
“串行化”隔离级别下直接用加锁的方式来避免并行访问
配置方式:将启动参数 transaction-isolation 的值设置成 READ-COMMITTED
事务隔离的实现: 展开说明“可重复读”
在 MySQL 中,实际上每条记录在更新的时候都会同时记录一条回滚操作。记录上的最新值,通过回滚操作,都可以得到前一个状态的值。
假设一个值从 1 被按顺序改成了 2、3、4,在回滚日志里面就会有类似下面的记录。
事务启动方式:
1.显式启动事务语句,begin或者start transaction,提交commit,回滚rollback;
2.set autocommit=0,该命令会把这个线程的自动提交关掉。这样只要执行一个select语句,事务就启动,并不会自动提交,直到主动执行commit或rollback或断开连接。
建议使用方法一,如果考虑多一次交互问题,可以使用commit work and chain语法。在autocommit=1的情况下用begin显式启动事务,如果执行commit则提交事务。如果执行commit work and chain则提交事务并自动启动下一个事务。
事务启动时机:
begin/start transaction 命令并不是一个事务的起点,在执行到它们之后的第一个操作InnoDB 表的语句,事务才真正启动。如果你想要马上启动一个事务,可以使用 start transaction with consistent snapshot 这个命令。
MySQL 里,有两个“视图”的概念:
一个是 view。它是一个用查询语句定义的虚拟表,在调用的时候执行查询语句并生成结果。创建视图的语法是 create view … ,而它的查询方法与表一样。
另一个是 InnoDB 在实现 MVCC 时用到的一致性读视图,即 consistent read view,用于支持 RC(Read Committed,读提交)和 RR(Repeatable Read,可重复读)隔离级别的实现。
“快照”在 MVCC 里是怎么工作的?
如图 2 所示,就是一个记录被多个事务连续更新后的状态。
一个数据版本,对于一个事务视图来说,除了自己的更新总是可见以外,有三种情况:
1.版本未提交,不可见;
2.版本已提交,但是是在视图创建后提交的,不可见;
3.版本已提交,而且是在视图创建前提交的,可见。
更新数据都是先读后写的,而这个读,只能读当前的值,称为“当前读”(current read)
除了 update 语句外,select 语句如果加锁,也是当前读
Mysql事务的实现原理相关推荐
- 《深入理解分布式事务》第二章 MySQL 事务的实现原理
shua# <深入理解分布式事务>第二章 MySQL 事务的实现原理 文章目录 一.Redo Log 1.Redo Log 基本概念 2.Redo Log 基本原理 3.Redo Log ...
- 五、Mysql事务以及锁原理
五.Mysql事务以及锁原理 事务(ACID) 场景:小明向小强转账10元 原子性(Atomicity) 转账操作是一个不可分割的操作,要么转失败,要么转成功,不能存在中间的状态,也就是转了一半的这种 ...
- 天天用事务,但是你知道MySQL事务的实现原理吗?
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:rrd.me/fDv2c 1. 开篇 相信大家都用过事务以及 ...
- Mysql事务和锁原理
一.mysql事务:MySql开启事务:begin. 1.并发事务产生的读问题 1)更新丢失:后提交事务会覆盖先提交的事务.乐观锁可解决. 2)脏读:A读到B未提交update数据.不符合一致性 3 ...
- mysql 事务值被改变_面试被问MySQL 事务的实现原理,怎么破?
Java面试笔试面经.Java技术每天学习一点 作者:小小木的博客 来源:https://www.cnblogs.com/wyc1994666/ 开篇 相信大家都用过事务以及了解他的特点,如原子性(A ...
- 面试刷题29:mysql事务隔离实现原理?
mysql的事务是innodb存储引擎独有的,myisam存储引擎不支持事务. 事务最经典的例子就是转账了,事务要保证的是一组数据库的操作要么全部成功,要么全部失败.是为了保证高并发场景下数据的正确性 ...
- MySQL事务ACID实现原理
照例,我们先来一个场景~ 面试官:"知道事务的四大特性么?" 你:"懂,ACID嘛,原子性(Atomicity).一致性(Consistency).隔离性(Isolati ...
- 深入理解Mysql - 事务与锁原理
一.事务的定义 事务是数据库管理系统执行过程中的一个逻辑单位,有一个有限的数据库操作序列构成.mysql 的存储引擎中只有InnoDB支持事务. 二.事务的四大特性 原子性(Atomicity):原子 ...
- 详述MySQL事务的实现原理
相信大家都用过事务以及了解他的特点,如原子性(Atomicity),一致性(Consistency),隔离型(Isolation)以及持久性(Durability)等.今天想跟大家一起研究下事务内部到 ...
- MySQL事务及实现原理
目录 一.MySQL事务简单介绍 二.事务特性ACID介绍 原子性(Atomicity) 一致性(Consistency) 隔离性(Isolation) 持久性(Durability) 三.事务隔离级 ...
最新文章
- python 拼多多秒杀_关于 拼多多笔试题-简单易懂的秒杀服务
- Docker的界面话管理工具
- 程序员偷偷深爱的 9 个不良编程习惯
- linux 本地yum 恢复,Linux_RHEL系统恢复安装光盘中的yum更新源的方法,安装光盘本地YUM更新源挂载安 - phpStudy...
- mac 不能连接wi-fi_如何阻止Mac自动连接到Wi-Fi网络
- (四)为深度伪造预处理数据集
- 软件测试面试技巧|项目常识篇
- 威纶通宏开机后使用初始化宏指令_你按下电脑开机键后,电脑都干了些什么?...
- 怎么利用微博进行营销?
- 读李虹之《画法几何及机械制图》
- 序列的傅里叶变换MATLAB实现
- 电脑如何分盘win10_如何给win10电脑系统盘分区?
- Scrapy实战之阳光热线问政平台
- javaScript一元四次、三次方程求根算法
- 小样本(小于30)假设检验与置信区间
- 非对称算法之RSA的签名剖析
- Ubuntu 16.04下DNW的安装及使用
- LATEX--页边距设置
- MySQL数据库在Windows系统上安装和基本使用
- 小程序与H5及混合应用测试