精华内容
下载资源
问答
  • MySQL事务之不可重复读问题

    千次阅读 多人点赞 2019-05-01 18:25:35
    在事务的并发操作中,也就是多个事务同时对同一组数据进行操作时,可能会出现脏读、不可重复读、幻读、丢失更新这四个问题,本篇博客就来为大家讲解 不可重复读 问题。 不可重复读 就是一个事务读到另一个事务修改...

    版权声明:本文为 小异常 原创文章,非商用自由转载-保持署名-注明出处,谢谢!
    本文网址:https://blog.csdn.net/sun8112133/article/details/89739475








    在事务的并发操作中,也就是多个事务同时对同一组数据进行操作时,可能会出现脏读、不可重复读、幻读、丢失更新这四个问题,本篇博客就来为大家讲解 不可重复读 问题。

    一、不可重复读概述

    不可重复读 就是一个事务读到另一个事务修改后并提交的数据(update)。在同一个事务中,对于同一组数据读取到的结果不一致。比如,事务B 在 事务A 提交前读到的结果,和在 事务A 提交后读到的结果可能不同。不可重复读出现的原因就是由于事务并发修改记录而导致的。
     
    隔离级别 有四种,分别是:读未提交、读已提交、可重复读、序列化。
      读未提交: Read Uncommitted,顾名思义,就是一个事务可以读取另一个未提交事务的数据。最低级别,它存在4个常见问题(脏读、不可重复读、幻读、丢失更新)。
      读已提交: Read Committed,顾名思义,就是一个事务要等另一个事务提交后才能读取数据。 它解决了脏读问题,存在3个常见问题(不可重复读、幻读、丢失更新)。
      可重复读: Repeatable Read,就是在开始读取数据(事务开启)时,不再允许修改操作 。它解决了脏读和不可重复读,还存在2个常见问题(幻读、丢失更新)。
      序列化: Serializable,序列化,或串行化。就是将每个事务按一定的顺序去执行,它将隔离问题全部解决,但是这种事务隔离级别效率低下,比较耗数据库性能,一般不使用。
     
    大多数数据库默认的事务隔离级别是 Read Committed,比如 SQL Server , Oracle。但 MySQL 的默认隔离级别是 Repeatable Read。

    1、事例

    程序员拿着信用卡去享受生活(卡里当然是只有3.6万),当他买单时(程序员事务开启),收费系统事先检测到他的卡里有3.6万,就在这个时候!!程序员的妻子要把钱全部转出充当家用,并提交。当收费系统准备扣款时,再检测卡里的金额,发现已经没钱了(第二次检测金额当然要等待妻子转出金额事务并提交完)。程序员就会很郁闷,明明卡里是有钱的…

    2、分析

    在这个事例中,涉及到了两个事务(程序员事务和妻子事务),当程序员事务开启时,收费系统读取程序员卡里钱的操作还没完成,此时妻子这个事务就将卡里的钱进行了转账,即对数据进行了修改,导致收费系统两次读取到的数据不一样。出现了一个事务范围内两个相同的查询却返回了不同数据,这就是不可重复读,这是由于数据更新导致的,不能重复读取相同的数据。

    事务的不可重复读


    二、演示不可重复读

    1、新建一个数据库(bank库),并准备一张表(account表)

    1、数据库和数据表

    2、打开两个窗口,并分别设置自动提交方式为off

    show variables like 'autocommit';   – 查看当前的自动提交是否开启

    set autocommit = off;   – 将自动提交关闭

    2、取消自动提交(A窗口)
    2、取消自动提交(B窗口)

    3、将A窗口的隔离级别设置成 “读已提交”

    select @@tx_isolation;   – 查询当前的隔离级别

    set session transaction isolation level read committed;   – 设置当前会话隔离级别为“读已提交”

    3、设置隔离级别

    4、两个窗口分别开启事务

    start transaction;   – 开启事务 或 begin; 也可以显式开启事务

    4、开启事务

    5、在B窗口更改数据,并提交事务

    use bank   – 切换到bank数据库

    update account set money = money - 100 where id = 1;   – 修改account表中id为1的money字段数据

    commit;   – 提交事务

    5、更改数据

    6、分别在数据库和A窗口中查看数据

    select * from account;   – 查看account中的全部数据

    6、查看数据(数据库)
    6、查看数据(A窗口)

    大家会发现数据库和A窗口中的数据都发生了改变,因为B窗口已经提交了事务,所以数据库中的数据发生改变,是属于正常现象。但是这种事务的隔离性似乎不是太好(事务的隔离性是一个事务的执行,不受其他事务的干扰),你看,B窗口提交了事务,影响到了A窗口中数据,这种隔离级别虽然解决了 ”脏读“ 问题,但是还会引发 “不可重复读”、“幻读”及“丢失更新” 问题,有关 “幻读”及“丢失更新” 的问题请参考后续博客。


    有关事务的知识可以参考我之前写的博客《【Spring4.0笔记整理十七】Spring事务详解》【Spring4.0笔记整理十八】Spring事务管理详解


    博客中若有不恰当的地方,请您一定要告诉我。前路崎岖,望我们可以互相帮助,并肩前行!



    展开全文
  • 1、脏读、幻读、不可重复读示例;2、MySQL中的四种事务隔离级别

    事务的隔离性

    MySQL是一个客户端/服务器架构的软件,对于同一个服务器来说,可以有若干个客户端与之连接,每个客户端与服务器连接上之后,就可以称之为一个会话(Session)。每个客户端都可以在自己的会话中向服务器发出请求语句,一个请求语句可能是某个事务的一部分,也就是对于服务器来说可能同时处理多个事务。当数据库上有多个事务同时执行的时候,就可能出现脏读(Dirty Read)、不可重复读(Non-Repeatable Read)、幻读(Phantom Read)的问题,为了解决这些问题,就有了 “隔离级别” 的概念。

    理论上在某个事务对某个数据进行访问时,其他事务应该进行排队,当该事务提交之后,其他事务才可以继续访问这个数据。但一般情况下隔离得越严实,效率就会越低。因此很多时候,我们都要在隔离性和效率二者之间寻找一个平衡点。

    事务并发执行遇到的问题

    脏读(Dirty Read): 脏读是指一个事务读到了另一个未提交事务修改过的数据。

    如小王的账户中有100的余额,接下来有两个事务对小王的账户进行访问。

    会话A会话B
    begin;
    update xxx set balance = balance+50 where client_no = ‘小王客户号’ ;begin;
    select balance from xxx where client_no = ‘小王客户号’ ;
    (如果读到150,则意味着发生了脏读)
    rollback;commit;

    如上,会话A和会话B各开启了一个事务,会话A先给小王账户余额加了50,此时账户B查询小王账户余额为150,接下来会话A进行了回滚,那会话B查询到的150就成一个不正确的脏数据。

    不可重复读(Non-Repeatable Read): 不可重复读是指在同一个事务内多次读取同一数据集合,但查到的结果却不相同。发生不可重复读的原因是在多次搜索期间查询的数据被其它事务修改了。

    看如下的两个会话请求。

    会话A会话B
    begin;
    select balance from xxx where client_no = ‘小王客户号’ ;
    (读到余额为100)
    begin;
    update xxx set balance = balance+50 where client_no = ‘小王客户号’ ;
    commit;
    select balance from xxx where client_no = ‘小王客户号’ ;
    (如果读到150,则意味着发生了不可重复读)
    commit;

    在会话A的同一个事务中,两次相同查询的结果不同,意味着发生了不可重复读。

    幻读(Phantom Read): 所谓幻读,指的是当某个事务在读取某个范围内的记录时,另外一个事务又在该范围内插入了新的记录,当之前的事务再次读取该范围的记录时,会读取到之前没有读到的数据。

    假如账户表中目前只有小王的余额为100,再看下如下的两个会话请求。

    会话A会话B
    begin;
    select name from xxx where balance = 100 ;
    (读到name为‘小王’)
    begin;
    insert into xxx(client_no,name,balance) values(‘小张客户号’,‘小张’,100);
    commit;
    select name from xxx where balance = 100 ;
    (如果读到了‘小王’和‘小张’,则意味着发生了幻读)
    commit;

    会话A事务中的第二次查询,查到了第一次查询没有查到的 name ‘小张’,这就意味着出现了幻读。

    SQL标准制定的四种隔离级别

    ISO 和 ANIS SQL 标准制定了四种事务隔离级别的标准,分别为:读未提交(read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(serializable )。

    我们先来看下这四种隔离级别的意思。

    • 读未提交: 一个事务还没提交时,它做的变更就能被别的事务看到。
    • 读提交: 一个事务提交之后,它做的变更才会被其他事务看到。
    • 可重复读: 一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。当然在可重复读隔离级别下,未提交的变更对其他事务也是不可见的。
    • 串行化: 顾名思义是对于同一行记录,“写”会加“写锁”,“读”会加“读锁”。当出现读写锁冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行。

    SQL 标准中规定,针对不同的隔离级别,并发事务可以发生不同严重程度的问题,具体情况如下:
    ( √ 表示可以发生;× 表示不可以发生)

    隔离级别脏读不可重复读幻读
    读未提交(read uncommitted)
    读提交(read committed)×
    可重复读(repeatable read)××
    串行化(serializable )×××

    MySQL对四种隔离级别的支持情况

    虽然 ISO 和 ANIS SQL 标准制定了四种事务隔离级别的标准,但不是所有数据库厂商都遵循这些标准,比如 Oracle 数据库就不支持读未提交(read uncommitted)和可重复读(repeatable read)的事务隔离级别。

    MySQL InnoDB 存储引擎支持4种隔离级别,但与 SQL 标准中定义的不同的是,InnoDB 存储引擎在默认的可重复读(repeatable read)事务隔离级别下,使用 Next-Key Lock 锁的算法,避免了幻读的产生。也就是说 InnoDB 存储引擎在可重复读(repeatable read)的事务隔离级别下,已经可以完全保证事务的隔离性要求,即达到了 SQL 标准中的串行化(serializable )隔离级别的要求。

    如何设置事务的隔离级别

    在 InnoDB 存储引擎中,可以使用以下命令来设置全局或者当前会话的事务隔离级别:

    SET [GLOBAL|SESSION] TRANSACTION ISOLATION LEVEL
    {
    	READ UNCOMMITTED
    	| READ COMMITTED
    	| REPEATABLE READ
    	| SERIALIZABLE
    }
    

    如想设置当前会话的隔离级别为读提交,可以使用如下语句:

    SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
    

    如果想在 MySQL 数据库启动时就设置事务的默认隔离级别,那就需要修改配置文件中 transaction-isolation 的值,比方说,我们在启动前指定了 transaction-isolation = READ COMMITTED,那么事务的默认隔离级别就从原来的 REPEATABLE READ 变成了READ COMMITTED。

    查看当前会话的事务隔离级别,可以用如下语句:

    SELECT @@transaction_isolation;
    

    查看全局的事务隔离级别,可以使用如下语句:

    SELECT @@global.transaction_isolation;
    

    注意:transaction_isolation 是在 MySQL 5.7.20 的版本中引入来替换tx_isolation的,如果你使用的是之前版本的 MySQL,请将上述用到的 transaction_isolation 的地方替换为 tx_isolation 。

    展开全文
  • 【数据库】快速理解脏读、不可重复读、幻读

    万次阅读 多人点赞 2018-08-14 19:24:29
    快速理解脏读、不可重复读、幻读? 理解这三种由于并发访问导致的数据读取问题,再理解事务隔离级别就简单多了。 【1】脏读(读取未提交数据) A事务读取B事务尚未提交的数据,此时如果B事务发生错误并执行...

                                 快速理解脏读、不可重复读、幻读?

     

    理解这三种由于并发访问导致的数据读取问题,再理解事务隔离级别就简单多了。

     

    【1】脏读(读取未提交数据

    A事务读取B事务尚未提交的数据,此时如果B事务发生错误并执行回滚操作,那么A事务读取到的数据就是脏数据。就好像原本的数据比较干净、纯粹,此时由于B事务更改了它,这个数据变得不再纯粹。这个时候A事务立即读取了这个脏数据,但事务B良心发现,又用回滚把数据恢复成原来干净、纯粹的样子,而事务A却什么都不知道,最终结果就是事务A读取了此次的脏数据,称为脏读。

    这种情况常发生于转账与取款操作中

    时间顺序

    转账事务

    取款事务

    1

     

    开始事务

    2

    开始事务

     

    3

     

    查询账户余额为2000元

    4

     

    取款1000元,余额被更改为1000元

    5

    查询账户余额为1000元(产生脏读)

     

    6

     

    取款操作发生未知错误,事务回滚,余额变更为2000元

    7

    转入2000元,余额被更改为3000元(脏读的1000+2000)

     

    8

    提交事务

     

    备注

    按照正确逻辑,此时账户余额应该为4000元

     

     

    【2】不可重复读(前后多次读取,数据内容不一致

    事务A在执行读取操作,由整个事务A比较大,前后读取同一条数据需要经历很长的时间 。而在事务A第一次读取数据,比如此时读取了小明的年龄为20岁,事务B执行更改操作,将小明的年龄更改为30岁,此时事务A第二次读取到小明的年龄时,发现其年龄是30岁,和之前的数据不一样了,也就是数据不重复了,系统不可以读取到重复的数据,成为不可重复读。

    时间顺序

    事务A

    事务B

    1

    开始事务

     

    2

    第一次查询,小明的年龄为20岁

     

    3

     

    开始事务

    4

    其他操作

     

    5

     

    更改小明的年龄为30岁

    6

     

    提交事务

    7

    第二次查询,小明的年龄为30岁

     

    备注

    按照正确逻辑,事务A前后两次读取到的数据应该一致

     

     

    【3】幻读(前后多次读取,数据总量不一致

    事务A在执行读取操作,需要两次统计数据的总量,前一次查询数据总量后,此时事务B执行了新增数据的操作并提交后,这个时候事务A读取的数据总量和之前统计的不一样,就像产生了幻觉一样,平白无故的多了几条数据,成为幻读。

    时间顺序

    事务A

    事务B

    1

    开始事务

     

    2

    第一次查询,数据总量为100条

     

    3

     

    开始事务

    4

    其他操作

     

    5

     

    新增100条数据

    6

     

    提交事务

    7

    第二次查询,数据总量为200条

     

    备注

    按照正确逻辑,事务A前后两次读取到的数据总量应该一致


    趁热打铁,既然理解了脏读、不可重复读、幻读,那么接下来看看事务隔离级别是怎么个回事【数据库】事务隔离级别

    不可

     

    展开全文
  • mysql中mvcc解决不可重复读

    千次阅读 2018-12-11 13:34:43
    不可重复读 幻读 读未提交 read-uncommitted 是 是 是 读已提交 read-committed 否 是 是 可重复读 repeatable-read 否 否 是 串行化 serializable 否 ...

    最近在了解了mysql中事务的隔离级别,记录一下

    事务的隔离级别:

    隔离级别脏读不可重复读幻读
    读未提交 read-uncommitted
    读已提交 read-committed
    可重复读 repeatable-read
    串行化 serializable

     

    脏读:事务A读取了事务B提交的数据,但是B事务由于某种原因导致事务回滚,但是A读取的仍然是事务B回滚之前的数据

    不可重复读:事务A读取了一条数据,这时事务B将该条数据修改,事务A再次读取该条数据时,和最开始读取的数据不一致

    幻读:事务A读取了一批数据,例如select * from user where age =10;读取出了5调数据。这时事务B又向user表插入了一条数据

    insert into user(age)values(10)。事务A再次查询时,会发现多了一条数据,这就是幻读。

    不可重复读和幻读的区别(个人理解):

    不可重复读:针对于修改同一条数据,会出现前后不一致的情况。解决方式为添加行锁

    幻读:针对于一批数据,主要体现在新增和删除操作。解决幻读需要锁整张表

    mysql中,默认的事务隔离级别是可重复读(repeatable-read),为了解决不可重复读,innodb采用了mvcc(多版本并发控制)来解决这一问题。

    mvcc是利用在每条数据后面加了隐藏的两列(创建版本号和删除版本号),每个事务在开始的时候都会有一个递增的版本号

    新增:insert into user (id,name,age)values(1,"张三",10);

    idnameagecreate_versiondelete_version
    1张三101 

     

    更新:update user set age = 11 where id = 1;

    更新操作采用delete+add的方式来实现,首先将当前数据标志为删除

    idnameagecreate_versiondelete_version
    1张三1012

     

    然后新增一条新的数据:

    idnameagecreate_versiondelete_version
    1张三1012
    1张三112 

     

    删除:删除操作是直接将数据的删除版本号更新为当前事务的版本号

    delete from user where id = 1;

    idnameagecreate_versiondelete_version
    1张三1123

     

    查询操作:

    select * from user where id = 1;

    查询操作为了避免查询到旧数据或已经被其他事务更改过的数据,需要满足如下条件:

    1、查询时当前事务的版本号需要大于或等于创建版本号

    2、查询时当前事务的版本号需要小于删除的版本号

    即:create_version <=  current_version  <  delete_version

    这样就可以避免查询到其他事务修改的数据

     

     

     

     

    展开全文
  • MySQL脏读、不可重复读、幻读

    千次阅读 2018-08-18 17:38:43
    原子性:指处于同一个事务中的多条语句是不可分割的。 一致性:事务必须使数据库从一个一致性状态变换到另外一个一致性状态。比如转账,转账前两个账户余额之和为2k,转账之后也应该是2K。 隔离性:指多线程环境下...
  •   开篇声明,由于两位大佬排版不够美观,然后又发现一些歧义,因此我集百家之所长,精心整理并排版良好,放心阅读。 http://blog.csdn.net/yuxin6866/article/details/52649048 ... 一、数据库事务正确执行的四个...
  • 事物级别,不可重复读和幻读的区别

    万次阅读 多人点赞 2019-01-08 19:41:44
    : 原文链接:这一次,带你搞清楚MySQL的事务隔离级别! 使用过关系型数据库的,应该都事务的概念有所了解,知道事务有 ACID 四个基本属性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和...
  • 数据并发的问题 (脏读、不可重复读、幻象读)和数据库锁机制
  • 不可重复读和可重复读的理解

    千次阅读 2019-12-04 21:13:34
    1、 不可重复读: 同一个事务中: id=10行, 字段c1, 第一次查询 c1=0; id=10行, 字段c1, 第二次查询 c1=1; 因为在第二次查询, 另外一个事务修改了c1=1,且事务提交。 2、 可重复读: 同一个事务中: id=10行, ...
  • 理解这三种由于并发访问导致的数据读取问题,再理解事务隔离级别就简单多了。脏(读取未提交数据)A事务读取B事务尚未提交的数据,此时如果B事务发生错误并执行回滚操作,那么...
  • 简单解释不可重复读和幻读

    千次阅读 2018-12-22 22:47:58
    不过很多人对“不可重复读”和“幻读“这两者的区别搞不清楚,包括我自己曾也是迷糊了很久一段时间。 但是,必须说明的是“不可重复读”关注的重点其实在于更新和删除这两种操作。 比如:一个事务A开启后,第一次...
  • 快速理解脏读,不可重复读,幻读

    万次阅读 多人点赞 2019-04-29 21:39:26
    介绍 要聊事务,不可避免的要提到数据库事务的四大特性:ACID atomic consistence isolation durability 先放一个表格,看看4个隔离级别会出现的各种问题,网上的解释一大堆。...不可重复读 幻读 read ...
  • 转载:MySQL专题: 脏读、不可重复读、幻读区别 目录 脏读(Dirty Read) 不可重复读 幻读 幻读和不可重复读的区别     脏读(Dirty Read) 读取到了未提交的数据(如果事务这时候回滚了...
  • 脏读,不可重复读,幻读区别和避免

    万次阅读 2020-03-27 14:28:06
    在了解脏不可重复度,幻之前,首先要明白这三种情况的出现都是和数据库并发事务有关联的,如果所有的读写都按照队列的形式进行,就不会出现问题。 名词解析和解决方案 脏又称无效数据读出(读出了脏...
  • 复习到数据库中数据的一致性,简单记录一下。 本文的例子来源于数据库系统概论第五版(王珊、萨师煊著)。 1. 例子 首先看一个简单的例子: 考虑飞机订票系统的一个活动序列: (1)甲售票点(事务T1)读出某航班...
  • 1、数据脏 事务a修改了某条数据,然后事务b读取了事务a修改的该条数据,然后事务a由于某些原因,事务a回滚了,这样事务b到的数据就和回滚的数据不同了,这时事务b读取的数据就是脏数据。概况一句话就是一个事务...
  • 脏读,不可重复读,幻读区别

    千次阅读 2018-11-12 09:58:27
    脏读 脏读又称无效数据读出。一个事务读取另外一个事务还没有提交的数据叫脏读。 例如:事务T1修改了一行数据,但是还没有提交,这时候事务...不可重复读是指在同一个事务内,两个相同的查询返回了不同的结果。 ...
  • mysql不可重复读到底什么意思

    千次阅读 2020-06-11 16:26:00
    不可重复读 幻读 读未提交(read-uncommitted) 是 是 是 不可重复读(read-committed) 否 是 是 可重复读(repeatable-read) 否 否 是 串行化(serializable) 否 ...
  • MySQL的不可重复读和幻读

    千次阅读 2019-05-29 17:11:11
    不可重复读 不可重复读是指在同一个事务中,两次(或以上)查询发现符合条件的数据记录的字段值发生了变化,导致不可重复读出现的原因主要是update操作 不可重复读的例子 Alice和Bob开启了数据库的两个事务; Bob...
  • 数据库 不可重复读与幻读的区别

    万次阅读 多人点赞 2019-06-12 12:09:16
    不可重复读的重点是修改: 同样的条件,你读取过的数据,再次读取出来发现值不一样了 幻读的重点在于新增或者删除 同样的条件,第1次和第2次读出来的记录数不一样 当然,从总的结果来看,似乎两者都表现为两次读取的...
  • 脏读和不可重复读的区别

    千次阅读 2017-07-26 15:34:37
    脏读  脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也... 不可重复读是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也
  • 当数据库上有多个事务同时执行的时候,就可能出现脏读(dirty read)、不可重复读 (non-repeatable read)、幻读(phantom read)的问题,为了解决这些问题,就有 了“隔离级别”的概念。   注意隔离级别越高...
  • 面试官:脏读,不可重复读,幻读是如何发生的?

    千次阅读 热门讨论 2019-03-03 01:33:42
    介绍 数据库事务的四大特性 原子性(Atomic) ...不可重复读 幻读 read uncommitted(未提交读) √ √ √ read committed(提交读) × √ √ repeatable read(可重复读) × × √ ...
  • 数据库事务隔离级别(脏读、幻读、不可重复读)

    千次阅读 多人点赞 2017-06-22 14:51:24
    数据库事务的隔离级别有4个,由低到高依次为Read uncommitted 、Read committed 、Repeatable read 、Serializable ,这四个级别可以逐个解决脏读 、不可重复读 、幻读 这几类问题。 √: 可能出现...
  • 不可重复读和幻读的区别

    千次阅读 2020-03-16 20:34:42
    不可重复读是因为在读的时候没有禁止写操作,两次读取的数据不一致,主要针对的是update或delete 幻读是因为虽然此时读操作禁止了写操作,所以update和delete都是不行的,但是由于未知行的不存在,无法加锁,所以...
  • 不可重复读,虚读和脏读的区别

    千次阅读 2018-12-13 09:47:46
    2. 不可重复读 :是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样...
  • 一、简介 未提交读(Read Uncommitted):允许脏读,也就是可能...在SQL标准中,该隔离级别消除了不可重复读,但是还存在幻象读。 串行读(Serializable):完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻
  • 数据库事务隔离级别(脏读、幻读、不可重复读

    万次阅读 多人点赞 2018-08-12 18:12:47
    一、脏读、幻读和不可重复读 一、脏读、不可重复读、幻读 1、脏读:脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这...
  • 快速理解脏读、不可重复读和幻读

    千次阅读 多人点赞 2020-09-04 21:38:21
    不可重复度 幻 一、脏指事务A读取到了事务B更新了但是未提交的数据,然后事务B由于某种错误发生回滚,那么事务A读取到的就是脏数据。 具体的说,一个数据原本是干净的,但是事务B将它进行修改使得其不再...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 431,410
精华内容 172,564
关键字:

不可重复读