1

来自 MySQL 词汇表:

幻像:出现在查询结果集中但不在先前查询结果集中的行。例如,如果一个查询在一个事务中运行了两次,与此同时,另一个事务在插入新行或更新行以匹配查询的 WHERE 子句后提交

粗体部分是否正确?如果我有

CREATE TABLE  t1 (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `c1` varchar(45) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;

并且隔离级别是REPEATABLE READ,我这样做

mysql> start transaction;
mysql> SELECT * FROM t1 WHERE c1 < 10;
+----+------+
| id | c1   |
+----+------+
|  1 | 4    |
+----+------+
mysql> SELECT * FROM t1 WHERE c1 < 10;
+----+------+
| id | c1   |
+----+------+
|  1 | 4    |
+----+------+

即使没有人执行任何 INSERT 而只是 UPDATE,我有时也会从后面的查询中得到不同的结果?我的 MySQL 版本是 5.7。

SQL 标准表明幻读仅与并发 INSERT 相关,尽管生成这个词有点令人困惑。来自 ISO/IEC 9075:1992,数据库语言 SQL-1992 年 7 月 30 日(第二次非正式审查草案):

P3(“幻影”​​):SQL 事务 T1 读取满足某些搜索条件的行集 N。然后 SQL 事务 T2 执行 SQL 语句,生成满足 SQL 事务 T1 使用的搜索条件的一个或多个行。如果 SQL 事务 T1 然后以相同的搜索条件重复初始读取,它将获得不同的行集合。

4

2 回答 2

1
于 2019-01-20T16:14:03.657 回答
0
于 2019-01-20T15:36:21.730 回答