我很困惑为什么它被称为幻影查询..例如假设这 3 个查询:-
查询 1
SELECT * FROM users
WHERE salary BETWEEN 10000 AND 300000;
返回2条记录。
查询 2
INSERT INTO users VALUES ( 3, 'Bob', 270000 );
COMMIT;
再次查询1
SELECT * FROM users
WHERE salary BETWEEN 10000 AND 30000;
返回3条记录。
看到这在我看来很正常。我不明白为什么它们被称为“幻读”。所有交易都在不同的时间发生,所以我们总是得到最新的数据。最初有 2 条记录,后来插入了 1 条记录..所以当我们再次运行 Query 时,我们得到更新的数据,即 3 条记录。那么为什么它被称为幻影查询。?
最佳答案
在纯粹的学术层面上,交易应该看到基于交易开始时的数据的数据库的一致状态。它应该只能看到自己的变化,而不能看到其他任何东西。
只要事务 1 没有完成查看提交的数据,就被认为是幻读,因为它看到事务开始时不存在的行。
由于并不总是需要这种强大的学术方法,因此引入了不同的隔离级别。根据要求,开发人员可以根据实现的业务规则选择需要哪个级别。
有时你想要幻读然后你使用READ COMMITTED
隔离级别(这是大多数DBMS的默认设置),有时你不想要它们 - 然后你使用SERIALIZABLE
隔离级别
关于mysql - 为什么称为幻影查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7820573/