当前读与快照读

概念

快照读

  读取的是记录数据的可见版本(可能是过期的数据),不用加锁

当前读

  读取的是记录数据的最新版本,并且当前读返回的记录都会加上锁,保证其他事务不会再并发的修改这条记录
  概念说的比较虚,也不好理解,接着举一个例子吧,假设你开启了两个事务,分别是A和B,这里有个张表,user表,里面有四条数据


x表示是排它锁(Exclusive),s表示共享锁(Share),
image.png

1、select快照读(照片)

  当你执行select *之后,在A与B事务中都会返回4条一样的数据,这是不用想的,当执行select的时候,innodb默认会执行快照读,相当于就是给你目前的状态找了一张照片,以后执行select 的时候就会返回当前照片里面的数据,当其他事务提交了也对你不造成影响,和你没关系,这就实现了可重复读了,那这个照片是什么时候生成的呢?不是开启事务的时候,是当你第一次执行select的时候,也就是说,当A开启了事务,然后没有执行任何操作,这时候B insert了一条数据然后commit,这时候A执行 select,那么返回的数据中就会有B添加的那条数据......之后无论再有其他事务commit都没有关系,因为照片已经生成了,而且不会再生成了,以后都会参考这张照片。

2、update、insert、delete 当前读

  当你执行这几个操作的时候默认会执行当前读,也就是会读取最新的记录,也就是别的事务提交的数据你也可以看到,这样很好理解啊,假设你要update一个记录,另一个事务已经delete这条数据并且commit了,这样不是会产生冲突吗,所以你update的时候肯定要知道最新的信息啊。

  我在这里介绍一下update的过程吧,首先会执行当前读,然后把返回的数据加锁,之后执行update。加锁是防止别的事务在这个时候对这条记录做什么,默认加的是排他锁,也就是你读都不可以,这样就可以保证数据不会出错了。但注意一点,就算你这里加了写锁,别的事务也还是能访问的,是不是很奇怪?数据库采取了一致性非锁定读,别的事务会去读取一个快照数据。
  innodb默认隔离级别是RR, 是通过MVVC来实现了,读方式有两种,执行select的时候是快照读,其余是当前读,所以,mvvc不能根本上解决幻读的情况




链接:https://www.jianshu.com/p/27352449bcc0

转载于:https://www.cnblogs.com/twoheads/p/10703836.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/462858.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

随手笔记

import turtleturtle.bgcolor("red")turtle.fillcolor("yellow")turtle.color(yellow)turtle.speed(10)#主星turtle.begin_fill()turtle.up()turtle.goto(-600,220) turtle.down()for i in range (5): turtle.forward(150)turtle.right(144)turtle.end_…

详解AST抽象语法树

浅谈 AST 先来看一下把一个简单的函数转换成AST之后的样子。 // 简单函数 function square(n) {return n * n; }// 转换后的AST {type: "FunctionDeclaration",id: {type: "Identifier",name: "square"},params: [{type: "Identifier&quo…

rbac 权限分配, 基于formset实现,批量增加

这里需要两个知识点:  - formset  - 自动发现项目中的URL1. 什么是formset:  Django中 form组件 或 ModelForm组件,用于做一个表单的验证。 接收前端form表单中的数据,并进行验证。 并且还可以用于表单的渲染工作。 (就是直…

HDU 1247 Hat’s Words 字典树(Trie树)

HDU 1247 Hat’s Words 字典树(Trie树) 字典树的建立是应该都是一样的 下面是我的做法: 建立完后, 对每一个单词都进行find_string()判断是否符合, 分别对其分成两半, 用j分隔开(左闭右开); 分别find()其子串[0, j1), [j1, string_len), 当两子串都找到后,则输出此主串, 然后,b…

setBackgroundResource的一个问题

2019独角兽企业重金招聘Python工程师标准>>> 一&#xff0c;<RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android" android:id"id/layout" android:layout_width"fill_parent" android:layout_height…

Memcache应用场景

Memcache应用场景介绍面临的问题对于高并发高访问的Web应用程序来说&#xff0c;数据库存取瓶颈一直是个令人头疼的问题。特别当你的程序架构还是建立在单数据库模式&#xff0c;而一个数据池连接数峰 值已经达到500的时候&#xff0c;那你的程序运行离崩溃的边缘也不远了。很多…

mingw + msys 上编译 ffmpeg

下载以下文件 mingw msys msysdtk ffmpeg-0.6.1 1.安装 mingw &#xff0c;一路next d:\mingw 2.安装 msys &#xff0c;msysdtk 到同样的路径下,比如:d:\msys\1.0&#xff0c;ffmpeg需要用到perl&#xff0c;刚好msysdtk中有 3.整合 msys 和 mingw 创建文件 d:\msys\1.0\…

双向长短期神经网络(Bi-LSTM)-多输入时序预测

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、部分代码展示&#xff1a; 四、完整代码下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台编…

微软的云笔记:OneNote+SkyDrive

OneNote是微软的一款笔记软件&#xff08;如果单说功能要绝对要比EverNote强大多了&#xff09;&#xff0c;它可以让你随时记录各种文字、图片&#xff0c;同时在格式排版方面它也继承了Word的强大编辑功能。但是随着各种移动办公需求的产生OneNote这种本地化的保存方式确实在…

【转】温州的南拳

南拳和北腿少林武当功太极八卦连环掌中华有神功在我国传统武术中素有南拳和北腿之分&#xff0c;实际上这种分法点出了我国南北地域拳风的特点&#xff0c;南方的拳术沉马寸劲、迅疾紧凑、重拳厉掌&#xff0c;着眼在拳&#xff1b;北方的拳路却是阔幅舒展、大开大合&#xff0…

day05-数据类型与操作

转载于:https://www.cnblogs.com/klw1/p/10727073.html

开发高级 Web 部件

通过用户控件实现 Web 部件相当容易&#xff0c;但是也有一些弊端&#xff1a; 受限的重用&#xff1a;如果不手动复制 .ascx 文件到其他 Web 应用程序的目录下&#xff0c;就不能动态添加这些控件到其他 Web 应用程序的页面中。 受限的个性化&#xff1a;用户控件的个性化仅限…

强一致性和弱一致性的区别

一致性包括强一致性和弱一致性&#xff1a; 弱一致性&#xff1a;可以理解为CAP定律中的不一致现象。但是经过一定的时间会达到最终一致性 强一致性: 包含线性一致性和顺序一致性。 因此强一致性不一定是线性一致性&#xff0c;但线性一致性一定是强一致性

Juqery Html(),append()等方法的Bug

标题中说是jquery中的Bug&#xff0c;只是个人这么认为&#xff0c;先申明一下&#xff01; 这几天在做动态加载图片热区&#xff0c;我用Ajax获取到了area标签&#xff0c;这里有多个area,在IE8和FF里测试正常&#xff0c;可一到IE7,和IE6里面就显示不正常了。后来发现jquery中…

maven 聚合工程 用spring boot 搭建 spring cloud 微服务 模块式开发项目

项目的简单介绍: 项目采用maven聚合工程 用spring boot 搭建 spring cloud的微服务 模块式开发 项目的截图: 搭建开始: 能上图 我少打字 1.首先搭建maven的聚合工程 1.1创建聚合工程的父模块 1.2设置父模块的POM文件 主要是配置 spring boot版本&#xff0c;spring cloud 版本&…

使用loadrunner编写webservice接口请求

1、使用工具&#xff1a; loadrunner12&#xff0c;本实例截图中都是loadrunner12工具 2、操作步骤&#xff1a; 1)、新建脚本&#xff0c;选择Web Services协议&#xff1a; 2)、选择工具栏&#xff1a; 3)、点击Import&#xff0c;输入wsdl地址&#xff1a;测试代码用的地址&…

实验二《Java面向对象程序设计》实验报告

一、实验内容 初步掌握单元测试和TDD理解并掌握面向对象三要素&#xff1a;封装、继承、多态初步掌握UML建模熟悉S.O.L.I.D原则了解设计模式 二、实验步骤 &#xff08;一&#xff09;单元测试 1.三种代码&#xff1a;伪代码、测试代码、产品代码需求&#xff1a;在一个MyUtil类…

iOS开发那些事--创建基于故事板的iOS 6的HelloWorld

基于故事板的HelloWorld工程 Storyboard&#xff08;故事板&#xff09;是用来替代xib的技术&#xff0c;也是iOS 5最重要的新特性之一。我们用Storyboard&#xff08;故事板&#xff09;重构HelloWorld。 使用故事板重构HelloWorld 勾选“Use Storyboards”项。 工程创建完成之…

基于美国人口数据分析

https://github.com/jakevdp/PythonDataScienceHandbook 英文看不懂的话请自行选择中文翻译版转载于:https://www.cnblogs.com/Lucifer77/p/10741538.html

MySQL innodb每行数据长度的限制

今天在使用MySQL innodb时&#xff0c;create table时&#xff0c;报出这样的一个错误: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. You have to change some columns to TEXT or BLOBs 查阅MySQL的官方资料才发现&…