事务理论概述: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事务的实现原理相关推荐

  1. 《深入理解分布式事务》第二章 MySQL 事务的实现原理

    shua# <深入理解分布式事务>第二章 MySQL 事务的实现原理 文章目录 一.Redo Log 1.Redo Log 基本概念 2.Redo Log 基本原理 3.Redo Log ...

  2. 五、Mysql事务以及锁原理

    五.Mysql事务以及锁原理 事务(ACID) 场景:小明向小强转账10元 原子性(Atomicity) 转账操作是一个不可分割的操作,要么转失败,要么转成功,不能存在中间的状态,也就是转了一半的这种 ...

  3. 天天用事务,但是你知道MySQL事务的实现原理吗?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:rrd.me/fDv2c 1. 开篇 相信大家都用过事务以及 ...

  4. Mysql事务和锁原理

    一.mysql事务:MySql开启事务:begin. 1.并发事务产生的读问题  1)更新丢失:后提交事务会覆盖先提交的事务.乐观锁可解决. 2)脏读:A读到B未提交update数据.不符合一致性 3 ...

  5. mysql 事务值被改变_面试被问MySQL 事务的实现原理,怎么破?

    Java面试笔试面经.Java技术每天学习一点 作者:小小木的博客 来源:https://www.cnblogs.com/wyc1994666/ 开篇 相信大家都用过事务以及了解他的特点,如原子性(A ...

  6. 面试刷题29:mysql事务隔离实现原理?

    mysql的事务是innodb存储引擎独有的,myisam存储引擎不支持事务. 事务最经典的例子就是转账了,事务要保证的是一组数据库的操作要么全部成功,要么全部失败.是为了保证高并发场景下数据的正确性 ...

  7. MySQL事务ACID实现原理

    照例,我们先来一个场景~ 面试官:"知道事务的四大特性么?" 你:"懂,ACID嘛,原子性(Atomicity).一致性(Consistency).隔离性(Isolati ...

  8. 深入理解Mysql - 事务与锁原理

    一.事务的定义 事务是数据库管理系统执行过程中的一个逻辑单位,有一个有限的数据库操作序列构成.mysql 的存储引擎中只有InnoDB支持事务. 二.事务的四大特性 原子性(Atomicity):原子 ...

  9. 详述MySQL事务的实现原理

    相信大家都用过事务以及了解他的特点,如原子性(Atomicity),一致性(Consistency),隔离型(Isolation)以及持久性(Durability)等.今天想跟大家一起研究下事务内部到 ...

  10. MySQL事务及实现原理

    目录 一.MySQL事务简单介绍 二.事务特性ACID介绍 原子性(Atomicity) 一致性(Consistency) 隔离性(Isolation) 持久性(Durability) 三.事务隔离级 ...

最新文章

  1. python 拼多多秒杀_关于 拼多多笔试题-简单易懂的秒杀服务
  2. Docker的界面话管理工具
  3. 程序员偷偷深爱的 9 个不良编程习惯
  4. linux 本地yum 恢复,Linux_RHEL系统恢复安装光盘中的yum更新源的方法,安装光盘本地YUM更新源挂载安 - phpStudy...
  5. mac 不能连接wi-fi_如何阻止Mac自动连接到Wi-Fi网络
  6. (四)为深度伪造预处理数据集
  7. 软件测试面试技巧|项目常识篇
  8. 威纶通宏开机后使用初始化宏指令_你按下电脑开机键后,电脑都干了些什么?...
  9. 怎么利用微博进行营销?
  10. 读李虹之《画法几何及机械制图》
  11. 序列的傅里叶变换MATLAB实现
  12. 电脑如何分盘win10_如何给win10电脑系统盘分区?
  13. Scrapy实战之阳光热线问政平台
  14. javaScript一元四次、三次方程求根算法
  15. 小样本(小于30)假设检验与置信区间
  16. 非对称算法之RSA的签名剖析
  17. Ubuntu 16.04下DNW的安装及使用
  18. LATEX--页边距设置
  19. MySQL数据库在Windows系统上安装和基本使用
  20. 小程序与H5及混合应用测试

热门文章

  1. python之去除文本标点符号
  2. Catia 法兰连接盘设计
  3. 【洛谷P2818】天使的起誓
  4. C++ 算法篇 高精度
  5. 一个大学应届生的互联网创业心得
  6. Cors解决跨域问题
  7. 西安电子科技大学上分记录
  8. 华为云赋能企业智能升级
  9. 设置html前导符,或要在制表符前插入特定字符(前导符)
  10. Oracle集合查询详解加练习题