14.2.2.5 幻象读

原创 2015年11月18日 15:25:52

所谓的幻象读发生在事务当相同的查询产生不同的结果集在不同的时间,比如

如果SELECT 执行两次,但是第2次返回和第一次返回时不相等的,这个记录称为 幻象行。

假设 这里有一个index 在child 表的id列,你需要读和lock 所有的记录 值大于100,

意向更新一些列在选择的记录后。

SELECT * FROM child WHERE id > 100 FOR UPDATE;

查询扫描index 从第一个记录 id是大于100开始。 如果表包含记录有id值在90和102.

如果locks 设置在index records 在扫描范围 不允许插入在gaps 区间(在这种情况下, gap 区间是90到102)

另外的会话是插入一个新的记录到表 值为101.

如果你执行相同的SELECT 在相同的事务里,你会看到一个一个新的记录id=101(一个幻读)

查询返回的结果。如果我把一组数据集称为数据项,

新的幻象child 会违反事务的隔离机制,一个事务可以运行在它的事务期间数据没有改变。

为了防止幻读,InnoDB 使用一个算法称为next-key locking 组合index-row locking 和gap locking.

InnoDB 执行row-level locking 以这样的方式 当它搜索或者扫描一个表的索引,

它设置共享的或者排它锁 在index records 它遇到的。因此,row-level locks 实际是index-record locks.

因此,一个next-key lock 在一个index record locks 也影响”gap” 在那个index record.

也就是说,一个next-key lock 是一个Index-record lock 加上一个gap lock 在gap index record 之前。

如果一个会话有一个共享锁或者排它锁在记录R,另外的会话不能插入一个新的index record 在这个区间

立即在R 顺序前。

当InnoDB 扫描索引时,它可以锁住区间在最后的记录 在索引里,就像前面发生的例子:

为了防止任何的插入 ,id值大于100, InnoDB设置的locks 包括一个lock 在区间。

你可以使用next-key locking 来应用一个唯一检查在你的应用。

如果你读你的数据在共享模式和不会看到重复对于一条你要插入的记录,

你可以安全的插入你的记录和知道next-key lock 设置在你的记录的继承者 在读阻止任何其他插入一个重复值。

数据库脏读、不可重复读、幻象读

数据库的事务隔离级别(TRANSACTION ISOLATION LEVEL)是一个数据库上很基本的一个概念。为什么会有事务隔离级别,SQL Server上实现了哪些事务隔离级别?事务隔离级别的前提是...
  • JIESA
  • JIESA
  • 2015年11月03日 10:32
  • 1317

(四)MySQL InnoDB锁类型及幻象读问题

MySQL InnoDB锁类型及幻象读问题 (一)MySQL InnoDB事务模型 (二)MySQL InnoDB锁模型 (三)MySQL InnoDB非锁定一致性读与锁定读 (四)MySQL Inn...
  • zyz511919766
  • zyz511919766
  • 2015年10月27日 17:18
  • 1347

脏读,不可重复读,幻象读

脏读:一个事务读到另外一个事务还没有提交的数据,我们称之为脏读。 不可重复读:...
  • u011228110
  • u011228110
  • 2014年08月15日 14:53
  • 281

数据库脏读、不可重复读、幻象读

数据库的事务隔离级别(TRANSACTION ISOLATION LEVEL)是一个数据库上很基本的一个概念。为什么会有事务隔离级别,SQL Server上实现了哪些事务隔离级别?事务隔离级别的前提是...
  • lipc_
  • lipc_
  • 2016年11月08日 16:03
  • 216

常见的麦克风供电方式总结(幻象供电)

幻象供电 Phantom Power 幻象供电方式是现今专业麦克风领域最常用的供电方式。幻象供电这种方式是由电报工程师发明的。他们利用平衡传输线作为一条导体,大地作为另一个导体构成一个信号回路,这种方...
  • liyuanbhu
  • liyuanbhu
  • 2014年01月28日 11:22
  • 14349

【jzoj4756】【幻象】

题目大意每秒他的思绪中都有一定的概率浮现出奇异的幻象,持续x秒的幻象将产生 x^2的幻象值。他想知道,在N秒内他期望产生的幻象值是多少。解题思路设L[i]为第i秒幻象的持续时间的期望.显然L[i]= ...
  • chunkitlau
  • chunkitlau
  • 2016年09月05日 20:37
  • 200

1075:幻象迷宫

#include #include #include #define MAXN 1600 #define LEFT {-1,0} #define RIGHT {1,0} #define UP ...
  • u012848631
  • u012848631
  • 2014年04月16日 13:58
  • 852

数据库,事务,脏数据

数据库的事务,是指作为单个逻辑工作单元执行的一系列操作。 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单...
  • xingxing1828
  • xingxing1828
  • 2014年06月26日 16:38
  • 2180

mysql事务隔离级别以及有问题的读取(脏读,不可重复读,幻象读)

1.事务里一些有问题的读取:脏读,不可重复读,幻象读 脏读 (dirty read)事务T1更新了一行记录的内容,但是并没有提交所做的修改。事务T2读取更新后的行,然后T1执行回滚操作,取消了刚才所...
  • huangxy10
  • huangxy10
  • 2015年03月21日 15:05
  • 401

mysql事务隔离级别以及有问题的读取(脏读,不可重复读,幻象读)

1.事务里一些有问题的读取:脏读,不可重复读,幻象读 脏读 (dirty read)事务T1更新了一行记录的内容,但是并没有提交所做的修改。事务T2读取更新后的行,然后T1执行回滚操作,取消了刚才所...
  • M87138
  • M87138
  • 2014年10月27日 08:44
  • 287
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:14.2.2.5 幻象读
举报原因:
原因补充:

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