gpt4 book ai didi

sql - REPEATABLE_READ 隔离是否会阻止非范围查询的插入?

转载 作者:行者123 更新时间:2023-12-02 01:10:35 24 4
gpt4 key购买 nike

给定以下 SQL 伪代码:

... open transaction ...
SELECT * FROM users WHERE users.id = 5
... some calculation here ...
INSERT INTO users (id) VALUES (5)
... commit transaction ...

REPEATABLE_READ isolation保证防止并发连接在查询和插入之间插入 Users[id=5],或者我是否需要为此使用 SERIALIZABLE 隔离?

注意:如果可能的话,我正在寻找与数据库无关的解决方案。如果不是,请提供来自多个数据库的经验证据,以便我们可以反对某种行业共识。

更新:原始问题包含一个使用范围锁的不正确查询。由于此问题的目的是关注不需要范围锁定的查询,因此我更新了问题。

最佳答案

没有。 REPEATABLE_READ 隔离级别仅保证如果您在同一事务中重复 SELECT,您将看到相同的数据,这意味着 (SQL) 实现可以隐藏您执行的事务插入通过其他交易。

唯一能够阻止插入的隔离级别是 SERIALIZABLE,因为它保证如果您有多个事务同时运行,结果将就像它们按特定顺序依次运行一样。未指定或报告每种情况下的具体顺序,但可以保证存在一个会产生相同最终结果的顺序。

该问题的条件之一是与数据库无关(我假设是高级答案),因此我不会提及不同隔离级别在不同数据库实现中的工作方式或它们如何转化为锁。

关于sql - REPEATABLE_READ 隔离是否会阻止非范围查询的插入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17960201/

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