gpt4 book ai didi

sql - SERIALIZABLE 隔离级别上的两个并发事务

转载 作者:行者123 更新时间:2023-11-29 13:09:55 25 4
gpt4 key购买 nike

让我们考虑两个并发的 SQL 事务:

X = 0 
T1: | T2:
begin | begin
set serializable level | set serializable level
|
WRITE(X,1)
| READ(X) : 0
COMMIT |
| COMMIT

我已经使用 PosgreSQL 对其进行了测试。为什么 T2 可以正确提交?两个事务都具有可序列化级别。因此,在我看来, T2 开始后,行 X 被修改了。因此,T2:COMMIT 应该会失败。为什么不呢?

最佳答案

In effect, a SELECT query sees a snapshot of the database as of the instant the query begins to run. Source

SELECT 查询将只对该快照进行操作。但其他类型的查询的行为与您预期的一样。

UPDATE, DELETE, SELECT FOR UPDATE, and SELECT FOR SHARE . . . will wait for the first updating transaction to commit or roll back (if it is still in progress). Source (ibid)

例如,您可以通过运行两个 psql session 来验证此行为。在一个 session 中运行 UPDATE 语句,在另一个 session 中运行 SELECT...FOR UPDATE。


this answer 中引用的文档可能会让你有点困惑;该文档是关于一个稍微不同的问题。但您可能会发现终端 session 的记录很有用。

关于sql - SERIALIZABLE 隔离级别上的两个并发事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56323560/

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