gpt4 book ai didi

mysql - 为什么称为幻影查询?

转载 作者:行者123 更新时间:2023-11-29 04:54:36 25 4
gpt4 key购买 nike

我很困惑为什么它被称为幻影查询..例如假设这 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com