数据库(针对MySQL)中不可重复读与幻读的区分

原创 2018年04月16日 21:06:31

数据库(针对MySQL)中不可重复读与幻读的区分

1、不可重复读

    不可重复读指的是,在同一个事务中采用同一个SQL语句前后读取的数据集合不一致。

    举例来说:现有并行的两个事务,事务1和事务2。

    t1时刻:事务1和事务2通过SELECT * FROM user WHERE name = 'martin';事务1和事务2此时都能从数据库中读取出完全相同的一条记录('martin',21,'m');

    t2时刻:事务1通过DELETE FROM user WHERE name='martin';删除了数据库中的名叫martin的用户,并将该事务进行提交(commit);

    t3时刻:事务2再次通过SELECT * FROM user WHERE name = 'martin';发现数据库中不存在名叫martin的用户。

    根据数据库对隔离性(Isolation)的定义:事务中的操作对其它事务而言是隔离的,事务的执行不受其它其它事务的干扰。从上面的三个时刻可以看出,事务1的删除操作影响了事务2的读操作(事务2第二次没能读到第一次读到的martin用户)。所以不可重复读违背了数据库的隔离性

2、幻读

    幻读指的是,解决了不可重复读的问题,实现了不可重复读,但由于事务之间不相互干扰,造成了某事务对数据的增、删、改对另一个并行的事务而言是完全不可知的,这样就产生了幻读的问题。

    举例来说:现有两个并行的事务,事务1和事务2。

    t1时刻:事务1和事务2通过SELECT * FROM user;得到了完全相同的20条记录;

    t2时刻:事务1执行DELETE FROM user WHERE name='martin';删除了数据库中的名叫martin的用户,并将该数据库进行提交(commit);

    t3时刻:事务1通过SELECT * FROM user;得到了与时刻1完全相同的20条记录,其中也包括了t2时刻由事务1删除的名叫martin的用户的记录。事务1的读到了本应该本删除的记录,对毫不知情的事务1而言在外人看来就遇到了幽灵(phantom),此时便产生了幻读。

    上面的例子这是通过DELETE操作产生了幻读问题,同理可以也可以通过类似的分析,在执行UPDATE、INSERT操作后,也会产生幻读现象。

Windows 2000 的安全隐患

Windows 2000 的安全隐患加入时间:01-1-4 下午 08:48:24上一篇  文章分类  下一篇  原文作者avoidnf8@hotmail.com greyzone@compsecur...
  • silversoft
  • silversoft
  • 2001-01-06 00:29:00
  • 490

数据库的脏读、不可重复读、幻读以及不可重复读和幻读的区别

介绍数据库的脏读、不可重复读、幻读都和事务的隔离性有关。所以先了解一下事务的4大特性。 事务的4大特性(ACID):原子性(Atomicity):事务是数据库的逻辑工作单位,它对数据库的修改要么全部...
  • stu_hsj
  • stu_hsj
  • 2015-06-23 11:14:52
  • 7585

数据库 不可重复读与幻读的区别

精炼解释: 不可重复读的重点是修改: 同样的条件, 你读取过的数据, 再次读取出来发现值不一样了 幻读的重点在于新增或者删除 同样的条件, 第1次和第2次读出来的记录数不一样 当然, 从总的结果...
  • crazy_meng
  • crazy_meng
  • 2015-12-23 11:11:42
  • 1661

mysql 关于 不可重复读与幻读的解决方案

http://www.cnblogs.com/hellopretty/p/5020093.html 关于幻读 不可重复读 在同一事务中,两次读取同一数据,得到内容不同,侧重点在于数据...
  • silyvin
  • silyvin
  • 2017-08-22 17:19:42
  • 1070

数据库事务隔离级别-- 脏读、幻读、不可重复读(清晰解释)

一、数据库事务隔离级别 数据库事务的隔离级别有4个,由低到高依次为Read uncommitted 、Read committed 、Repeatable read 、Serializable ,...
  • JIESA
  • JIESA
  • 2016-05-04 18:36:24
  • 45493

幻读与不可重复读区别

不可重复读与幻读比较相似,都是在一个事务中多次读取到不同的数据。网络上的总结如下 不可重复读:所谓的虚读,也就是大家经常说的不可重复读,是指在数据库访问中,一个事务范围内两个相同的查询却返回了不同数...
  • ianhol
  • ianhol
  • 2016-04-14 13:21:52
  • 3236

数据库中的-脏读,幻读,不可重复读

数据库带来的并发问题包括:      1.丢失或覆盖更新。(幻像读)    2.未确认的相关性(脏读)。    3.不一致的分析(非重复读)。详细描述如下:一.丢失更新当两个或多个事务选择同一行,然后...
  • d8111
  • d8111
  • 2008-06-29 11:51:00
  • 18605

mysql脏读、不可重复读、幻读(虚读)

1、事务的特性:经常作为面试 l  原子性:指处于同一个事务中的多条语句是不可分割的。 l  一致性:事务必须使数据库从一个一致性状态变换到另外一个一致性状态。比如,转账,转账前两个账户余额之和为...
  • huanglei1234567890
  • huanglei1234567890
  • 2016-02-28 17:19:50
  • 2335

幻读和不可重复读的区别

MySQl MySql默认的隔离级别为Repeatable Read,因此只会出现幻读的情况。 幻读 事务在插入已经检查过不存在的记录时,惊奇的发现这些数据已经存在了,之前的检测获取到的...
  • v123411739
  • v123411739
  • 2014-09-15 20:51:27
  • 23619

理解数据库事务隔离级别以及脏读, 不可重复读, 幻读

数据库事务的4个特性: 原子性(atomic): 都成功或者都失败; 一致性(consistency):事务操作之后,数据库所处的状态和业务规则是一致的;比如a,b账户相互转账之后,总金额不变; ...
  • sunxing007
  • sunxing007
  • 2011-05-17 16:29:00
  • 15247
收藏助手
不良信息举报
您举报文章:数据库(针对MySQL)中不可重复读与幻读的区分
举报原因:
原因补充:

(最多只允许输入30个字)