iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >如何理解MySQL的一致性读
  • 735
分享到

如何理解MySQL的一致性读

2024-04-02 19:04:59 735人浏览 泡泡鱼
摘要

如何理解Mysql的一致性读,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一 前言   

如何理解Mysql的一致性读,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

一 前言
   mysql 在不同的事务隔离级别下提供两种读模式 一致性读(非加锁)当前读(加锁读)。当前读比较简单,小编主要研究一致性读取。
二 原理概念

官方概念

  1. "A consistent read means that InnoDB uses multi-versioning to present to a query a snapshot of the database at a point in time. The query sees the changes made by transactions that committed before that point of time, and no changes made by later or uncommitted transactions.The exception to this rule is that the query sees the changes made by earlier statements within the same transaction. "

一致性读是指使用mvcC机制读取到某个事务已经提交的数据,其实是从undo里面获取的数据快照。不过也有特例: 在本事务内如果修改某个表之后的select 可以读取到该表最新的数据,后面的例子可以验证。   
三 不同事务隔离级别的一致性读
3.1 RR模式
从官方文档 "If the transaction isolation level is REPEATABLE READ (the default level), all consistent reads within the same transaction read the snapshot established by the first such read in that transaction."
 在RR模式下,同一个事务内的一致性读的快照都是基于第一次读取操作时所建立的。下面我们做测试进行对RR模式下一致性读进行解读。
a)RR模式下事务的起始点是以执行的第一条语句为起始点的,而不是以begin作为事务的起始点的。

session 1

session2

test [RW] 10:01:33 >begin;

Query OK, 0 rows affected (0.00 sec)



test [RW] 10:02:12 >begin;

Query OK, 0 rows affected (0.00 sec)


test [RW] 10:02:22 >select * from ty;

Empty set (0.00 sec)


test [RW] 10:02:36 >insert into ty(a,b) values(1,2);

Query OK, 1 row affected (0.00 sec)


test [RW] 10:02:51 >commit;

Query OK, 0 rows affected (0.00 sec)


test [RW] 10:02:33 >select * from ty;

+----+------+------+

| id | a






b)RR模式下的一致性读,是以第一条select语句的执行时间点作为snapshot建立的时间点的,即使是访问不同的表。

test [RW] 10:35:11 >begin;

Query OK, 0 rows affected (0.00 sec)

test [RW] 10:35:13 >select * from x;

+----+

| id |

+----+

|

test [RW] 10:34:32 >begin;

Query OK, 0 rows affected (0.00 sec)



test [RW] 10:34:51 >insert into ty(a,b) values(2,4);

Query OK, 1 row affected (0.00 sec)

test [RW] 10:35:39 >select * from ty;

+----+------+------+

| id | a





c)RR模式下,在本事务内如果修改某个表之后的对该表的select语句可以读取到该表最新的数据。

test [RW] 10:42:56 >begin;

Query OK, 0 rows affected (0.00 sec)


test [RW] 10:43:07 >select * from ty;

+----+------+------+

| id | a

test [RW] 10:35:34 >begin;

Query OK, 0 rows affected (0.00 sec)


test [RW] 10:43:25 >insert into ty(a,b) values(3,5);

Query OK, 1 row affected (0.00 sec)



test [RW] 10:43:38 >select * from ty;

+----+------+------+

| id | a

test [RW] 10:43:14 >update



d)RR模式下同一个事务内,第一次查询是当前读操作则后续查询可以查看最新的数据。

test [RW] 11:07:23 >begin;

Query OK, 0 rows affected (0.00 sec)

test [RW] 11:07:26 >update ty set a=5 where id=2;

Query OK, 1 row affected (0.00 sec)

Rows matched: 1

test [RW] 11:07:31 >begin;

Query OK, 0 rows affected (0.00 sec)

test [RW] 11:07:33 >select * from ty where id=2 for update;

+----+------+------+

| id | a

test [RW] 11:07:36 >insert into ty(a,b) values(6,7);

Query OK, 1 row affected (0.00 sec)

test [RW] 11:07:55 >commit;

Query OK, 0 rows affected (0.00 sec)

test [RW] 11:07:58 >select * from ty;

+----+------+------+

| id | a

With READ COMMITTED isolation level, each consistent read within a transaction sets and reads its own fresh snapshot.

四 当前读

和一致性读不太一样 ,当前读需要使用select  xx  for update,或者 lock in share mode ,读取最新的数据并且定被访问的行,(RC 加行锁,RR加gap锁 唯一键除外) 不管另外一个事务是否提交,如果另外的事务已经获取了相关的锁,则 for update,lock in share mode 语句则继续等待直到其他事务释放锁,并且获取到最新的数据。

从上面的测试来看,RR模式下的一致性快照读会有比较多的特性(姑且叫做特性吧) 。RC模式本身支持不可重复读,能够查询到最新的其他事务最新提交的数据。基于上面的测试,还是比较推荐业务使用RC模式作为事务隔离级别的。

关于如何理解Mysql的一致性读问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网数据库频道了解更多相关知识。

您可能感兴趣的文档:

--结束END--

本文标题: 如何理解MySQL的一致性读

本文链接: https://www.lsjlt.com/news/66164.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何理解MySQL的一致性读
    如何理解MySQL的一致性读,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一 前言   ...
    99+
    2024-04-02
  • MySQL半一致性读原理的示例分析
    小编给大家分享一下MySQL半一致性读原理的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! 1、什么是半一致性读A t...
    99+
    2024-04-02
  • 如何理解一致性哈希
    这篇文章主要讲解了“如何理解一致性哈希”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何理解一致性哈希”吧!一技能:哈希算法分组韩信的一技能哈希算法:将士兵...
    99+
    2024-04-02
  • 怎么理解Innodb一致性非锁定读
    这篇文章主要讲解了“怎么理解Innodb一致性非锁定读”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么理解Innodb一致性非锁定读”吧!一致性非锁定读指...
    99+
    2024-04-02
  • 如何理解一致性哈希算法
    本篇内容介绍了“如何理解一致性哈希算法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!要了解一致性哈希,首先...
    99+
    2024-04-02
  • 一致性非锁定读与一致性锁定读的大数据分析
    本篇文章为大家展示了一致性非锁定读与一致性锁定读的大数据分析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。背景innodb存储引擎实现了两种标准的行级锁:S锁和X锁...
    99+
    2024-04-02
  • 什么是数据库的读一致性和写一致性
    一、读一致性 读一致性是指在数据库中的并发读操作中,读取到的数据应该是一致的。具体来说,当一个事务在执行读取操作时,如果另一个事务正在对同一数据进行修改(写操作),那么读取操作应该获取到已经提交的最新版本的数据,而不是读取到部分修改完成的数...
    99+
    2023-10-29
    数据库 读一致性 写一致性
  • mysql如何确保视图的一致性
    这篇文章主要为大家展示了“mysql如何确保视图的一致性”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mysql如何确保视图的一致性”这篇文章吧。具体如下:我们...
    99+
    2024-04-02
  • 一致性读实现原理是什么
    本篇内容主要讲解“一致性读实现原理是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“一致性读实现原理是什么”吧!MySQL中的事务事务在RDBMS系统中概念基...
    99+
    2024-04-02
  • 如何理解Spark Streaming的数据可靠性和一致性
    如何理解Spark Streaming的数据可靠性和一致性,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。眼下大数据领域最热门的词汇之一便是流计算了,其中最耀眼的项目无疑是来自S...
    99+
    2023-06-19
  • redis和mysql如何保证一致性
    保证 redis 和 mysql 一致性的方法有直接写入 mysql 和事务补偿机制:直接写入 mysql:通过触发器将 mysql 数据变更同步到 redis,保证一致性但性能较低;事...
    99+
    2024-04-20
    mysql redis
  • MySQL如何保证备份数据的一致性详解
    目录前言1. 全库只读2. 全局锁3. 事务4. 小结前言 为了数据安全,数据库需要定期备份,这个大家都懂,然而数据库备份的时候,最怕写操作,因为这个最容易导致数据的不一致,松哥举一...
    99+
    2024-04-02
  • Cassandra怎么处理读写一致性问题
    Cassandra是一个高性能、分布式数据库系统,它采用了基于CAP理论的分布式设计。在Cassandra中,读写一致性问题通常通过...
    99+
    2024-04-02
  • MySQL与Redis如何保证数据一致性详解
    前言 由于缓存的高并发和高性能已经在各种项目中被广泛使用,在读取缓存这方面基本都是一致的,大概都是按照下图的流程进行操作: 但是在更新缓存方面,是更新完数据库再更新缓存还是直接删...
    99+
    2024-04-02
  • 怎样浅析Oracle的物理读 逻辑读 一致性读 当前模式读
    怎样浅析Oracle的物理读 逻辑读 一致性读 当前模式读,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 Oracle 物理读 逻辑读 ...
    99+
    2024-04-02
  • redis一致性问题如何解决
    Redis是一个内存数据库,是单进程单线程的,所以它没有复制和分布式的特性。因此,Redis本身并没有提供一致性的解决方案。然而,可...
    99+
    2023-08-20
    redis
  • redis集群读写不一致如何解决
    要解决Redis集群读写不一致的问题,可以考虑以下几种方法:1. 一致性哈希算法(Consistent Hashing):通过将键值...
    99+
    2023-09-06
    redis
  • C++ 函数名称的可读性和一致性
    答案:c++++ 函数名称应具备可读性和一致性,以提高代码可维护性和可理解性。可读性准则:使用描述性名称避免使用动名词一致性准则:使用一致的命名约定使用 pascal 或 camel 命...
    99+
    2024-04-24
    c++ 函数命名
  • 如何理解数据库的并发操作与一致性
    这篇文章主要讲解了“如何理解数据库的并发操作与一致性”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何理解数据库的并发操作与一致性”吧!作为分布式强一致数据...
    99+
    2024-04-02
  • MySQL中如何确保数据的一致性和完整性
    在MySQL中,可以通过以下方式来确保数据的一致性和完整性: 使用主键和外键约束:定义主键和外键可以确保数据表之间的关系,避免数...
    99+
    2024-04-09
    MySQL
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作