文档章节

简单整理一下mysql的隔离级别;

世界和平维护者
 世界和平维护者
发布于 2016/10/06 20:23
字数 840
阅读 30
收藏 1

READ UNCOMMITTED
    SELECT语句以非锁定方式被执行,但是一个可能更早期版本的记录会被用到。因此,使用这个隔离级别,比如,读是不连贯的。这也被称为“脏读”( dirty read)。另外,这个隔离级别象READ COMMITTED一样作用;简而言之,在READ UNCOMMITTED的隔离级别下,开启事物但事物并未提交之前,对于其他的事物都是可见的,记住,从性能的角度上来说,这个级别不见得比其他隔离级别的好;一般情况下非常少用,除非特殊业务需求;

READ COMMITTED
    一个有些象Oracle的隔离级别。所有SELECT ... FOR UPDATE和SELECT ... LOCK IN SHARE MOD语句仅锁定索引记录,而不锁定记录前的间隙,因而允许随意紧挨着已锁定的记录插入新记录。 UPDATE和DELETE语句使用一个带唯一搜索条件的唯一的索引仅锁定找到的索引记录,而不包括记录前的间隙。在范围类型UPDATE和DELETE语句, InnoDB必须对范围覆盖的间隙设置next-key锁定或间隙锁定以及其它用户做的块插入。这是很必要的,因为要让MySQL复制和恢复起作用, “幽灵行”必须被阻止掉;简而言之,READ COMMITTED其实是解决了READ UNCOMMITTED的可重复读问题,即READ COMMITTED的隔离级别下,一个事物的开启到结束,它的所做的修改更新删除 对于其他事物而言都是不可见的;

REPEATABLE READ
    这是InnoDB的默认隔离级别。带唯一搜索条件使用唯一索引的SELECT ... FOR UPDATE, SELECT ... LOCK INSHARE MODE, UPDATE 和DELETE语句只锁定找到的索引记录,而不锁定记录前的间隙。用其它搜索条件,这些操作采用next-key锁定,用next-key锁定或者间隙锁定锁住搜索的索引范围,并且阻止其它用户的新插入。在持续读中,有一个与之前隔离级别重要的差别:在这个级别,在同一事务内所有持续读读取由第一次读所确定的同一快照。这个惯例意味着如果你在同一事务内发出数个无格式SELECT语句,这些SELECT语句对相互之间也是持续的;REPEATABLE READ解决了恶心的脏读情况,保证同一个事务在读取同样的记录的时候能够保证结果一致性;但是却没能解决幻读的问题,就是当一个事务在读取一个记录的同时,另外一个事物又在对这个记录进行插入操作,导致事物再次读取的时候产生换行

SERIALIZABLE
    这个级别类似REPEATABLE READ,但是所有无格式SELECT语句被 隐式转换成SELECT ... LOCK IN SHAREMODE。最高隔离级别,强制事务串行执行,可以说在对每个行数据加行锁,所以会导致很多锁的争用或者大量超时问题,性能很差,如果不是特殊的业务需求,一般不会选择这种情况;

附个图片(来自于高性能mysql):

© 著作权归作者所有

共有 人打赏支持
世界和平维护者
粉丝 7
博文 51
码字总数 76601
作品 0
深圳
程序员
私信 提问
MySQL · 源码分析 · InnoDB Repeatable Read隔离级别之大不同

开始介绍之前,先让我们了解一些基本概念。ANSI SQL STANDARD定义了4类隔离级别(READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE),包括了一些具体规则,用来限定事务内外...

阿里云RDS-数据库内核组
2017/06/08
0
0
mysql 开发进阶篇系列 6 锁问题

一.概述   在数据库中,数据是属于共享资源,为了保证并发访问的一致性,有效性,产生了锁。接下来重点讨论mysql锁机制的特点,常见的锁问题,以及解决mysql锁问题的一些方法或建议。 相比...

花阴偷移
07/23
0
0
MySQL 笔记 - 事务&锁

事务 简单的说,事务就是一组原子性的 SQL 查询,这一组 SQL 要么全部执行成功,要么全部执行失败。这里简单介绍一下事务的 ACID,ACID 表示原子性、一致性、隔离性和持久性。 原子性:一个事...

Java架构解析
09/16
0
0
数据库事务隔离级别(面试题 )

今天请了一天假去卓望公司面试,被问到数据库隔离机制的问题,真的没准备,平时的工作用到的也不多,数据库默认机制是啥也没怎么关心,回来看了点资料,打开mysql测试了一下,终于清楚了!总结...

在水一方发盐人
2016/11/11
96
0
mysql 4种事务隔离级别

SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的。低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销。 Read Uncommitted(...

蛋定龙
2015/10/23
293
0

没有更多内容

加载失败,请刷新页面

加载更多

ubuntu美化记,-修改皮肤,安装工具。

事情由来 最近系统盘坏了,换了新SSD,也换了新版的ubuntu 18.04LTS;不得不说,ubuntu 的桌面搞的越来越漂亮了。 把调整过的zsh shell样式,截个图上来镇一下楼: 添加了对python virtuale...

janl
17分钟前
0
0
阿里云物联网边缘计算加载MQTT驱动

写在前面 本文在LinkEdge快速入门样例驱动的基础上,加载了MQTT订阅的客户端,使得边缘端容器可以通过MQTT获得外部数据。 1. 系统需求 物联网边缘计算平台,又名Link IoT Edge[1]。在物联网边...

阿里云云栖社区
18分钟前
0
0
错误: 找不到或无法加载主类

在IDEA的使用过程中,经常断掉服务或者重启服务,最近断掉服务重启时突然遇到了一个启动报错: 错误:找不到或无法加载主类 猜测:1,未能成功编译; 尝试:菜单---》Build---》Rebuild Pro...

安小乐
34分钟前
2
0
vue路由传参,刷新页面,引发的bug

最近遇到一个bug 通过vue路由跳转到页面, 然后接参控制(v-if ),成功显示 而刷新页面,显示失败。 苦苦地找了半天原因,打印参数发现正确,再打印下类型......,路由跳过来会保持传参时的...

hanbb
34分钟前
3
0
【58沈剑 架构师之路】InnoDB,select为啥会阻塞insert?

MySQL的InnoDB的细粒度行锁,是它最吸引人的特性之一。 但是,如《InnoDB,5项最佳实践》所述,如果查询没有命中索引,也将退化为表锁。 InnoDB的细粒度锁,是实现在索引记录上的。 一,Inn...

张锦飞
38分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部