iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >数据库的事务隔离级别怎么理解
  • 833
分享到

数据库的事务隔离级别怎么理解

2024-04-02 19:04:59 833人浏览 安东尼
摘要

本篇内容主要讲解“数据库的事务隔离级别怎么理解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“数据库的事务隔离级别怎么理解”吧!在mvcC并发控制中,读操作可以分

本篇内容主要讲解“数据库事务隔离级别怎么理解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习数据库的事务隔离级别怎么理解”吧!

  1. mvcC并发控制中,读操作可以分成两类:快照读 (snapshot read)与当前读 (current read)。快照读,某一时刻的一致性读,不用加。当前读,读取的是记录的最新版本,并且,当前读返回的记录,都会加上锁,保证其他事务不会再并发修改这条记录。

  2. Mysql在RR隔离级别下,快照读和当前读如果在一个会话中先后出现,可能会出现幻读。因为快照读不加锁,会允许新的插入,当前读需要读到块的最新版本,因此快照读和当前读两次操作间,就可能会出现幻读。 

  3. mysql为实现RR隔离级别,带来了很大的代价,引入了Next-Key Locking解决当前读模式下的幻读问题。Next-Key Locking可能会导致大量的DML失败。oracle没有RR隔离级别,在read only级别下,Oracle没有幻读的问题(是快照读的模式),在read committed级别下,快照读、当前读以及混合的【快照读和当前读】下都存在幻读的问题。 

  4. RR隔离级别,Mysql是依靠MVCC实现的可重复读(read view),同时依靠MVCC实现快照读下的幻读问题,依靠Next-Key Locking实现当前读下的幻读问题,所以MySQL InnoDB的可重复读并不保证避免幻读,需要应用显式的使用加锁读来保证,而这个加锁读使用到的机制就是next-key locks。

  5. 脏读、不可重复读、幻读,是一种缺陷,越往后,解决缺陷的成本越高

  6. 隔离级别越高,能解决的“缺陷”越多,为什么不直接使用最高的事务隔离级别,那不就没有缺陷了? 因为隔离级别越高,并发性可能会越低。

  7. 脏读,解决 写不阻塞读的问题,提高并发性,牺牲读一致性。现在绝大多数的主流数据库,都是通过MVCC来解决写不阻塞读的问题,不是通过经典的锁来实现。

  8. 为什么会出现不可重复读取? 
    在经典的read commited方式下,对于读取过的数据并不加锁(读取的当下加共享锁,读取完成后释放共享锁),那么再次访问时数据可能已经被其他事务修改。

  9. 如何才能做到可重复读? 
    老一辈的数据库艺术家用的方式是加锁,对读取过的数据加锁,就能保证每一次读取到的数据都是一样的,因为对读取过的数据加锁后,数据无法发生修改了。这也是repeatable read这个隔离级别要解决的问题,但是经典的实现可重复读的方式会产生幻读。现在绝大多数的主流数据库,是通过MVCC来做到的可重复读,不是通过加锁。

  10. 经典的可重复读提供了一个一致性(语句级和事务级)的读取方式,虽存在幻读,单从一致性的角度看,并不是一个大的缺陷,如果以经典的锁的方式去实现可重复读,发生死锁的概率极大,但带来的一个(好的)副作用,解决了丢失更新的问题。

  11. 按照经典的隔离级别定义,read uncommited,read commited,都不能提供一致性读。因为当下主流数据库都基于MVCC实现,不基于经典的锁方式,所以都实现了在read commited级别下的语句级的一致性。经典的隔离级别下,repeatable read在语句级一致性的基础上还做到了事务级的一致性。

  12. 针对oracle的隔离级别来说,read commited级别能够提供语句级的一致性,这个隔离级别避免不了事务级的幻读的问题,需要read only或者最高的SERIALIZABLE级别。

  13. 在一个采用共享读锁(而不是多版本)的数据库中,如果启用了REPEATABLE READ,可以避免丢失更新的问题。原因是:已被读取的数据会在上面加一个锁(共享读锁,非排它锁),这个锁会保证数据不能被任何其他事务修改。

  14. 在可重复读(REPEATABLE READ,简称RR)隔离级别下,read view是在第一个读请求发起时创建的。在读已提交(READ COMMITTED,简称RC)隔离级别下,则是在每次读请求时都会重新创建一份read view。根据上面提到的说法,RC隔离级别下,是每次发起SELECT都会创建read view,也就是每次SELECT都能读取到本次查询开始时的已经commit的数据,所以才会出现不可重复读、幻读现象。

  15. read view 判断当前版本数据项是否可见 
    在innodb中,创建一个新事务的时候,innodb会将当前系统中的活跃事务列表(trx_sys->trx_list)创建一个副本(read view),副本中保存的是系统当前不应该被本事务看到的其他事务id列表。当用户在这个事务中要读取该行记录的时候,innodb会将该行当前的版本号与该read view进行比较。 
    具体的算法如下: 

    1. 设该行的当前事务id为trx_id_0,read view中最早的事务id为trx_id_1, 最迟的事务id为trx_id_2.

    2. 如果trx_id_0< trx_id_1的话,那么表明该行记录所在的事务已经在本次新事务创建之前就提交了,所以该行记录的当前值是可见的。跳到步骤6.

    3. 如果trx_id_0>trx_id_2的话,那么表明该行记录所在的事务在本次新事务创建之后才开启,所以该行记录的当前值不可见.跳到步骤5。

    4. 如果trx_id_1<=trx_id_0<=trx_id_2, 那么表明该行记录所在事务在本次新事务创建的时候处于活动状态,从trx_id_1到trx_id_2进行遍历,如果trx_id_0等于他们之中的某个事务id的话,那么不可见。跳到步骤5.

    5. 从该行记录的DB_ROLL_PTR指针所指向的回滚段中取出最新的undo-log的版本号,将它赋值该trx_id_0,然后跳到步骤2.

    6. 将该可见行的值返回。

需要注意的是,新建事务(当前事务)与正在内存中commit 的事务不在活跃事务链表中。

到此,相信大家对“数据库的事务隔离级别怎么理解”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

您可能感兴趣的文档:

--结束END--

本文标题: 数据库的事务隔离级别怎么理解

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

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

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

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

下载Word文档
猜你喜欢
  • 数据库的事务隔离级别怎么理解
    本篇内容主要讲解“数据库的事务隔离级别怎么理解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“数据库的事务隔离级别怎么理解”吧!在MVCC并发控制中,读操作可以分...
    99+
    2022-10-19
  • 数据库事务的隔离级别
    数据库事务的隔离级别有4种,由低到高分别为Read uncommitted 、Read committed 、Repeatable read 、Serializable 。而且,在事务的并发操作中可能会出现脏读,不可重复读,幻读。下面通过事...
    99+
    2014-06-29
    数据库事务的隔离级别 数据库入门 数据库基础教程 数据库 mysql
  • 数据库事务隔离的级别
    本篇内容介绍了“数据库事务隔离的级别”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1 概述与背景这是数据库...
    99+
    2022-10-18
  • 数据库事务隔离级别是什么
    这篇文章主要介绍了数据库事务隔离级别是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。数据库事务隔离级别:1、Read Uncommitt...
    99+
    2022-10-18
  • mysql数据库事务及隔离级别
    事务的四大特性: 原子性: 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用; 一致性: 执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的; 隔离性: 并发访问数据库时,一个用户的事务...
    99+
    2021-09-18
    mysql数据库事务及隔离级别
  • 数据库事务:ACID 和隔离级别
    一、什么是事务 事务是将多条 SQL 作为一个整体进行数据操作。这样能确保全部执行成功或全部执行失败,不改变任何数据。根据业务需求选择不同的存储引擎。对于那些不需要事务的查询类应用,选择非事务型的存储引擎能得到更高的性能,LOCK TABL...
    99+
    2016-06-16
    数据库事务:ACID 和隔离级别
  • 数据库中事务的隔离级别是什么
    数据库中事务的隔离级别是什么?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。MySQL 事务主要用于处理操作量大,复杂度高的数据...
    99+
    2022-10-18
  • 数据库ACID原则和事务隔离级别
    数据库ACID原则A:原子性,AtomicityC:一致性,ConsistencyI:隔离性,IsolationD:持久性,Durability在mysql中的innodb引擎,原子性,一致性,隔离性通过r...
    99+
    2022-10-18
  • mysql数据库隔离级别详解
    目录隔离级别一、mysql有四个事务隔离级别二、为什么默认RR隔离级别?三、RR隔离级别下手动加锁解决幻读理论基础脏读、不可重复读、幻读 及其解决方法事务隔离级别命令行操作操作验证一、实现脏读二、操作验证--实现不可重复...
    99+
    2022-06-16
    mysql隔离级别是什么 数据库事务的四种隔离级别 mysql隔离级别设置
  • mysql数据库四种事务隔离级别是什么
    这篇文章主要介绍了mysql数据库四种事务隔离级别是什么,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。熟悉 mysql 数据库四种事务隔离级别:...
    99+
    2022-10-18
  • 数据库事务隔离级别与概念是什么
    这篇文章将为大家详细讲解有关数据库事务隔离级别与概念是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。事务隔离的概念任何支持事务的数据库,都必须具备四个特...
    99+
    2022-10-19
  • 数据库的事务和隔离等级
    这篇文章将为大家详细讲解有关数据库的事务和隔离等级,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。事务事务指的是满足 ACID 特性的一组操作,可以通过 Commit 提交...
    99+
    2022-10-18
  • 数据库事务的四大特性和隔离级别
    数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么全部执行,要么全部都不执行。一个逻辑工作单元要成为事务,必须满足事务的四大特性(ACID)。即原子性(...
    99+
    2022-10-18
  • 数据库事务的四大特性以及事务的隔离级别整理
    事务的四大特性 原子性(atomicity) 我们经常说,一个事务执行失败了,就得回滚,其实这就是事务的原子性,一个完整事务,要么全部执行成功,如果有一个或者多个失败,那么就要回滚,其实这也是另一个特性即一致性的基础 一致性(...
    99+
    2016-02-05
    数据库事务的四大特性以及事务的隔离级别整理
  • 数据库事务——脏读,幻读,不可重复读,事务的隔离级别的理解
    面试的时候碰到了此类问题,此前认知一直模棱两可,特在此重新学习总结一下: 1、脏读:指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。 例如: 张三的工资...
    99+
    2020-11-02
    数据库事务——脏读,幻读,不可重复读,事务的隔离级别的理解
  • 数据库事务——脏读,不可重复读,幻读,事务的隔离级别的理解
    面试的时候碰到了此类问题,此前认知一直模棱两可,特在此重新学习总结一下: 1、脏读:指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。 例如: 张三的工资...
    99+
    2021-01-30
    数据库事务——脏读,不可重复读,幻读,事务的隔离级别的理解
  • 简单易懂理解事务的隔离级别
    在讲事务的隔离级别,我们先得回忆一下事务的隔离性 事务的隔离性是在当多个用户并发访问数据库时,比如说操作同一张表时,数据库为每一个用户开启事务,不能被其他事务的操作所干扰,多个并发事务之间需要相互隔离。即要达到这样的一种效果:对于任意的两...
    99+
    2017-04-06
    简单易懂理解事务的隔离级别
  • 如何理解MySQL中的事务隔离级别
    这篇文章给大家介绍如何理解MySQL中的事务隔离级别,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。很多小伙伴对 MySQL 的隔离级别一直心存疑惑,其实这个问题一点都不难,关键看怎么讲...
    99+
    2022-10-18
  • 数据库事务的四大特性以及事务的隔离级别
    四大特性 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: 原子性(Atomicity)   原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博客介绍事务的功能是一样的概念,因此事务的操作如果...
    99+
    2022-01-10
    数据库事务的四大特性以及事务的隔离级别
  • 【数据库的四种隔离级别】
    在关系型数据库中,隔离级别是指多个事务并发执行时,彼此之间的隔离程度。数据库的四种隔离级别如下: 1.读未提交(Read Uncommitted): 最低级别的隔离级别,一个事务可以读取到另一个事务未提交的数据,可能会出现脏读、不可重复读和...
    99+
    2023-08-19
    数据库 java 开发语言
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作