Consistent Nonlocking Reads

一致读意味着InnoDB用多版本来提供一个查询数据库某个时间点的快照。这种查询可以看到在当前世界点之前事务提交的改变,看不到此后提交的改变,更看不到未提交的改变。这个规则有一种例外情况是它可以看到同一个事务中在这个查询之前的改变。这种异常就造成:如果你更新一个表中的行,一个SELECT可以看到这些被更新的行的最近的版本,同时它也可以看到任意行的更旧的版本,如果另一个事务同时更新这个表的话就意味着你可能看到这个表的某一个状态但是这种状态其实在数据库中不存在。

如果事务隔离级别是REPEATABLE_READ,那么所有在同一个事务中的一致读将会读到在这个事务中第一个读到的那个稳定的快照版本。如果你提交当前事务,并且在随后执行相同的查询,那么你将得到更新的快照版本。

在READ_COMMITTED和REPEATABLE_READ隔离级别下一致读是InnoDB处理SELECT默认的方式。一致读不会对它所访问的表设置任何锁,因此在一致读的同时其它事务可以随意修改这个表。

假设事务隔离级别是REPEATABLE_READ,当你执行一致读的时候,InnoDB根据你查询这个数据库的时间来给你的事务一个时间点。如果在你的时间点以后另一个事务删除了一行并且提交了,那么你不会看到这一行,因为它已经被删除了。插入和修改也和这类似。

这叫多版本并发控制

下面的例子中,只有当B已经提交它的插入并且A也提交了,A才能看到B的插入

翻译自 https://dev.mysql.com/doc/refman/5.7/en/innodb-consistent-read.html

mysql一致性读的更多相关文章

  1. MySQL 一致性读 深入研究

    一致性读,又称为快照读.使用的是MVCC机制读取undo中的已经提交的数据.所以它的读取是非阻塞的. 相关文档:http://dev.mysql.com/doc/refman/5.6/en/innod ...

  2. MySQL 一致性读 深入研究 digdeep博客学习

    http://www.cnblogs.com/digdeep/p/4947694.html 一致性读,又称为快照读.使用的是MVCC机制读取undo中的已经提交的数据.所以它的读取是非阻塞的. 相关文 ...

  3. [MySQL] 一致性读分析

    MySQL MVCC MySQL InnoDB存储引起实现的是基于多版本的并发控制协议---MVCC(Multi-Version Concurrency Control),基于锁的并发控制,Lock- ...

  4. 差点掉坑,MySQL一致性读原来是有条件的

    众所周知,在设定了隔离等级为Repeatable Read及以上时,InnoDB 可以实现数据的一致性读.换句话来说,就是事务执行的任意时刻,读取到的数据是同一个快照,不会受到其他事务的更新影响. 以 ...

  5. MySQL一致性读原来是有条件的

    众所周知,在设定了隔离等级为Repeatable Read及以上时,InnoDB 可以实现数据的一致性读.换句话来说,就是事务执行的任意时刻,读取到的数据是同一个快照,不会受到其他事务的更新影响. 以 ...

  6. MySQL一致性非锁定读

    一致性非锁定读(consistent nonlocking read)是指InnoDB存储引擎通过多版本控制(multi versionning)的方式来读取当前执行时间数据库中行的数据,如果读取的行 ...

  7. MySQL的默认隔离级别的实现依赖于MVCC和锁,准确点说就是一致性读和锁。

    MySQL的默认隔离级别的实现依赖于MVCC和锁,准确点说就是一致性读和锁.

  8. MySQL——一致性非锁定读(快照读)&MVCC

    MySQL--一致性非锁定读(快照读) MySQL数据库中读分为一致性非锁定读.一致性锁定读 一致性非锁定读(快照读),普通的SELECT,通过多版本并发控制(MVCC)实现. 一致性锁定读(当前读) ...

  9. MySQL事务(二)事务隔离的实现原理:一致性读

    今天我们来学习一下MySQL的事务隔离是如何实现的.如果你对事务以及事务隔离级别还不太了解的话,这里左转. 好的,下面正式进入主题.事务隔离级别有4种:读未提交.读提交.可重复读和串行化.首先我们来说 ...

随机推荐

  1. gcc/g++ 命令的经常使用选项

    gcc/g++ 命令的经常使用选项格式(选项 解释) -o FILE 指定输出文件名称.在编译为目标代码时,这一选项不是必须的.假设FILE没有指定,缺省文件名称是a.out. -c 仅仅编译生成目标 ...

  2. Android长按事件和点击事件问题处理,OnItemLongClickListener和OnItemClickListener冲突问题

    今天在做demo时,须要设置ListView的item的长按和点击事件.OnItemLongClickListener和OnItemClickListener,然而点击事件能够实现,可是在长按操作时会 ...

  3. Implement Queue using Stacks(用栈实现队列)

    Implement the following operations of a queue using stacks. push(x) -- Push element x to the back of ...

  4. poj 2570 Fiber Network(floyd)

    #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int ...

  5. Android 防内存泄露handler

    Android 防内存泄露handler 1.使用弱引用 WeakRefHander /** * 作者: allen on 15/11/24.感谢开源作者https://coding.net/u/co ...

  6. C#基础知识 简单说明泛型的优点

    有关泛型的优缺点在网上有很多篇文章,也足以说明问题,我就不去复制粘贴了(而且内容有些多),由于记性不太好,所以自己做个简单明了的总结. 泛型的优点主要有两个: "性能" " ...

  7. More DETAILS! PBR的下一个发展在哪里?

    最近几年图形学社区对PBR的关注非常高,也许是由于Disney以及一些游戏引擎大厂的助推,也许是因为它可以被轻松集成进实时渲染的游戏引擎当中,也许是因为许多人发现现在只需要调几个参数就能实现具有非常精 ...

  8. Array的基本操作

    准备饿补基础技术,先来个数组的总结. 1 .合并操作    concat :   var C = A.concat(B);    用A数组合并B数组,生成新的C数组.      循环插入        ...

  9. Docker for Windows 使用入门

    欢迎来到Docker for Windows! Docker是用于创建Docker应用程序的完整开发平台,Docker for Windows是在Windows系统上开始使用Docker的最佳方式. ...

  10. 唐纳德 高德纳给年轻人的建议 Donald Knuth - My advice to young people

    From: Donald Knuth - My advice to young people (93/97) 译者: 李秋豪 原文 Donald Knuth (b. 1938), American c ...