事务的隔离级别是用来调节数据库的并发性和数据的可靠性之间的平衡的工具。MySQL支持所有四种标准的隔离级别,Repeatable Read,Read Commited,Read Uncommited, Serializable。他默认的隔离级别是Reapeatable Read。下面来说一下不同的隔离级别运作的原理,与锁在其中产生的作用。

Repeatable Read 可重复读

意思是同一事务中,多次对同一记录读取时,所读取到的值是一样的。这里涉及到一个InnoDB的Multi-Version的概念,正是它,实现了在同一事务中的一致性读取。同一事务多次读取的时候,都是读取的同一版本的数据快照,所以有可能在事务进行中,其他事务已经对记录做出来了变更,但原事务还是读取到旧版本的记录。

Multi-Version

InnoDB是一个使用了多版本技术的数据库,当一条记录被修改或删除时,在MySQL Tablespace 中一个叫回滚段(Rollback Segment)的数据结构中的重做日志(Redo log Segment)中,会存储该记录恢复到之前的样子的信息。存储这个信息的作用有两个, 一个是回滚的时候恢复数据,另外一个作用,就是为了能够在同一事务中实现一致读 (Consistent Read)。

MySQL的Repeatable Read隔离级别,同时也部分解决了幻读的问题。为什么说是部分呢?因为对于普通的Select ,同一事务中查询两次,并不保证记录数一致,因为不会加间隙锁(Gap Lock)或临键锁(Next-key Lock)来防止别的事务插入记录。

然而对于加锁的读( select ... lock in share mode 或者 select ... for update) 或者update和delete,MySQL会根据查询条件是否为范围查询,来加间隙锁(Gap Lock)或临键锁(Next-key Lock),以防止幻读的发生。也就是说,在事务结束前,其他事务锁住的区间都不能进行插入操作。

Read Committed 提交读

意思是在同一事务中,两次读取到的都是已提交的最新版本的数据,所以两次读取的值可能会有不同。它只解决了脏读的问题,不会读取到未提交的数据。

对于加锁的读( select ... lock in share mode 或者 select ... for update) 或者update和delete,MySQL只会对满足查询条件的记录加锁,不会在索引之前加临键锁或者间隙锁。所以不会防止其他事务插入数据,会导致幻读的发生。

Read Uncommitted 未提交读

会读取到未提交的记录,其他的和Read Committed一致。

SERIALIZABLE 序列化

这个级别和Repeatable Read差不多,但是在Select查询的时候,auto commit关闭的状况下,默认会在select 语句之后加上lock in share mode。也就是说,Select查询之间不会阻塞,但是碰到update,delete等加排他锁的语句时,会阻塞,等待获取锁。

mysql事务和锁innodb,MySQL - InnoDB 锁与事务(三)隔离级别与表的关系相关推荐

  1. MySQL可重复读应用场景_mysql-repeatable read 可重复读隔离级别-幻读实例场景

    本文详解 repeatable read 可重复读 隔离级别产生的影响(幻读) -- SERIALIZABLE serializable 序列化 :一个个事务排成序列的形式.事务一个挨一个执行,等待前 ...

  2. MySQL事务与锁详解,并发读异常与隔离策略

    文章目录 一.事务概念及ACID特性 二.隔离级别介绍 三.事务具体实现 3.1 undo log与redo log 3.2 MVCC 3.3 锁 3.3.1 粒度锁类型 3.2 锁算法介绍 四.并发 ...

  3. MySQL事务原理分析(ACID特性、隔离级别、锁、MVCC、并发读异常、并发死锁以及如何避免死锁)

    MySQL事务原理分析(ACID特性.隔离级别.锁.MVCC.并发读异常.并发死锁以及如何避免死锁) 一.事务 目的 组成 特征 事务空间语句 二.ACID特性 原子性(A) 隔离性(I) 持久性(d ...

  4. 正确理解MYSQL事务的可重复读RR隔离级别与锁

    1,mysql默认的事务隔离级别是可重复度. 可重复度就是在一个事务中对相同数据的多次查询将返回相同结果. 比如 事务1: BEGIN; SELECT age from student where i ...

  5. mysql的事务隔离级别与锁的关系、sql日志、Spring事务的特性

    文章目录 数据库事务介绍 什么是事务的隔离级别? 脏读幻读不可重复读的示例? mysql默认的隔离级别 Mysql锁有哪些 for update 什么是间隙锁?(Next-Key) mysql的日志 ...

  6. MySQL学习笔记 04、MySQL进阶(索引、事务、锁)

    文章目录 前言 一.MySQL的目录结构 1.1.认识目录文件 1.2.配置文件设置 windows平台下设置 linux环境下设置 二.MySQL的系统架构 2.1.MySQL系统的逻辑架构: 2. ...

  7. 事物的级别_浅谈MySQL并发控制:隔离级别、锁与MVCC

    推荐阅读: 恕我直言!收藏这个MySQL文档,你其余的MySQL学习资料都可以扔了 前言 如果数据库中的事务都是串行执行的,这种方式可以保障事务的执行不会出现异常和错误,但带来的问题是串行执行会带来性 ...

  8. 浅析MySQL InnoDB的隔离级别

    前言 还是老规矩,首先提出两个待解决的问题: MySQL InnoDB存储引擎中事务的隔离级别有哪些? 对应隔离级别的实现机制是什么? 本文就将对上面这两个问题进行解答,分析事务的隔离级别以及相关锁机 ...

  9. 事物的级别_面试官问:MySQL锁与事物隔离级别你知道吗?

    本文作者:何建辉(公众号:org_yijiaoqian) 点赞再看,养成习惯,微信搜一搜[一角钱小助手]关注更多原创技术文章. 本文 GitHub org_hejianhui/JavaStudy 已收 ...

最新文章

  1. java 窗体隐藏和关闭_java JFrame窗体真正关闭
  2. 阿里腾讯裁员冲上热搜,消息称最高涉及30%,官方未回应
  3. 免费教材丨第51期:数学基础课程----概率论教程、机器学习中的数学基础
  4. Druid runningSqlCount 1 线上解决思路
  5. 对三层架构的简单改进
  6. 面试题之发散思维能力:如何用非常规方法求1+2+···+n
  7. [翻译]延迟着色(1)
  8. 用python爬网站评论_python爬取携程景点评论信息
  9. js中的数组Array定义与sort方法使用示例
  10. 1000道Python题库系列分享九(31道)
  11. 十分钟理解线性代数的本质_复习线性代数的正确方式
  12. Takeown 实现解析
  13. 【黑金视频连载】NIOS II视频教程正式连载了!!!!!!!!
  14. java 前端及后台轮询方法总结
  15. 使用OpenCV进行图片模糊处理(中值滤波)
  16. rpg人物制作软件_RPG Maker系列最新版本《RPG制作大师MZ》上架Steam
  17. css怎么查找,查找CSS样式
  18. 抖音小店开通及保证金详情;抖音小店商品上架详细流程。丨国仁网络资讯
  19. 小玩意 - 银行业务的模拟系统(C++)
  20. python虚拟变量回归_第二周:python实现线性回归(哑变量回归)的高效方法

热门文章

  1. DataGridView DataGridViewCheckBoxColumn编辑时实时触发事件
  2. Datalist Repeater分页
  3. [JAVA-坑]CGLib动态代理引起的空指针异常
  4. python最小二乘法求a b_python_numpy实用的最小二乘法理解
  5. faster rcnn resnet_Faster-rcnn 代码详解
  6. 王道 —— 进程同步、进程互斥
  7. 随机抽样一致算法(Random sample consensus,RANSAC)
  8. 查看远程Redis服务器的版本
  9. 839 - Not so Mobile
  10. 【环境搭建003】UBUNTU + ECLIPS + ANDROID 嵌入式系统编译环境搭建遇到的稀奇古怪的问题集合