当前位置: 首页 > news >正文

《MySQL学习》 事务隔离 与 MVCC

《MySQL学习》 事务隔离

一.事务的概念

事务保证一组数据要么全部成功要么全部失败,MySQL的事务基于引擎(如InnoDB)实现。

二.事务的隔离性与隔离级别

MySQL的标准隔离级别:

  1. 读未提交 : 一个事务还没提交时,它做的变更就能被别的事务看到
  2. 读已提交 : 一个事务提交之后,它做的变更才会被其他事务看到。
  3. 可重复读 : 一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。当然在可重复读隔离级别下,未提交变更对其他事务也是不可见的。
  4. 串行化 : 是对于同一行记录,“写”会加“写锁”,“读”会加“读锁”。当出现读写锁冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行

注意 : MySQL 默认的隔离级别是可重复读,而Oracle是读已提交

MySQL实现不同的隔离级别是基于MVCC,在不同的时机快照读创建视图(区别于MySQL 的 view 视图)。

  1. 读未提交(RU)没有视图概念

  2. 在(RC)读已提交的隔离级别下,会在每个语句执行前创建视图(而不是事务开始时),因此是可以读到事务提交前其他事务已经提交的数据

  3. 在(RR)可重复读的隔离级别下,会在执行第一条select语句时创建视图,直到事务提交,因此只能读到事务开始前其他事务已经提交的数据,当前事务前后读取到的数据都是一致的

  4. 串行化(SC)则是通过加锁

三.事务隔离的实现

在 MySQL 中,实际上每条记录在更新的时候都会同时记录一条回滚操作。记录上的最新值,通过回滚操作,都可以得到前一个状态的值。 redo log (重做日志)记录变更记录,由 undo log 记录回滚日志

在查询这条记录的时候,不同时刻启动的事务会有不同的 read-view。如图中看到的,在视图 A、B、C 里面,这一个记录的值分别是 1、2、4,同一条记录在系统中可以存在多个版本,就是数据库的多版本并发控制(MVCC)

img

回滚日志不会一直保留,一个事务对应一个视图,有的事务还对应undolog,当对应undolog的事务之前的事务都提交了,对应的视图也也跟随删除了,则当前事务提交时,视图删除,undolog也将删除

http://www.lryc.cn/news/870.html

相关文章:

  • html(二)基础标签
  • leetcode刷题---递归思想
  • ThreadLocal 源码级别详解
  • 训练营day17
  • Nodejs原型链污染
  • 【Vue3】element-plus中el-tree的递归处理赋值回显问题
  • C语言---宏
  • 算法导论—路径算法总结
  • 程序环境--翻译+执行
  • 微信小程序内部那些事
  • 这是从零在独自开开发,将是副业赚钱最好的平台!
  • Spring MVC 之获取参数(对象、JSON格式数据、URL地址参数、文件、Cookie)
  • 永磁同步电机中BEMF电阻的作用
  • JAVA练习45-二叉树的层序遍历
  • 超高精度PID调节器的特殊功能(3)——变送输出(转发)功能及其应用
  • 【C++】nullptr C++中的空指针(C++11)
  • 笔试题-2023-大疆-数字IC设计【纯净题目版】
  • Python dict字典方法完全攻略(全)
  • 用“AI“挑选一件智慧礼物
  • 【Spark分布式内存计算框架——Spark Core】4. RDD函数(下) 重分区函数、聚合函数
  • 智能工厂自动化设备如何将数据采集到物联网云平台上
  • SpringBoot整合Mybatis的核心原理
  • 滴滴一面:order by 调优10倍,思路是啥?
  • Vue框架学习篇(五)
  • (蓝桥杯 刷题全集)【备战(蓝桥杯)算法竞赛-第1天(基础算法-上 专题)】( 从头开始重新做题,记录备战竞赛路上的每一道题 )距离蓝桥杯还有75天
  • C++——继承那些事儿你真的知道吗?
  • leetcode 困难 —— N 皇后(简单递归)
  • AWS实战:Dynamodb到Redshift数据同步
  • 机器学习评估指标的十个常见面试问题
  • 常见的安全问题汇总 学习记录