gpt4 book ai didi

mysql - 可串行化冲突以及为什么 2 次读取不冲突?

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

根据我所读到的分析事务的基本方法是冲突可序列化的概念。
因此数据库系统必须通过这种方式保证事务的调度相当于可序列化。
但我看不出这个模型在这个简单的例子中是如何工作的。
假设如下:

T1  
READ(A)
A = A - 50
WRITE(A)

和交易 2:

T2  
READ(A)
A = A - 50
WRITE(A)

根据冲突可串行性,只有 WRITE(A) 存在冲突。但除此之外,可能的执行可能是:
T1 和 T2 同时执行 READ(A) 操作。结果每次都读取到原始值。因此,最终结果是 A - 50,而不是串行执行的结果 A -50 -50

因此,从我的角度来看,这两个读物冲突的(但冲突等价理论认为它们不冲突)

所以我不明白该方法如何涵盖这个基本示例,而且这是具有可重复读隔离级别的数据库中的标准执行。

最佳答案

根据冲突可串行性,WRITE 操作与 READWRITE 操作均发生冲突。因此,即使每个READ (A) 与另一个事务的READ (A) 指令不冲突,它也会与另一个事务的WRITE (A) 指令发生冲突。要获得更深入的解释,您可以考虑查看 Abraham Silberschatz 等人所著的“数据库系统概念”。等人。第6版的14.6章应该是澄清的。

编辑:根据我之前所说的,并补充说,当且仅当调度可以从串行调度派生时(没有一对事务可以并行执行)交换调度的顺序时,该调度是可冲突串行的指令对彼此不冲突,很明显,冲突可串行化调度对任何数据库的影响将与串行调度的效果相同。因此,我们可以得出结论,冲突可串行性保证了一致性。

话虽如此,数据库管理员可以实现或不实现这种调度,这对事务的一致性有相应的影响。

关于mysql - 可串行化冲突以及为什么 2 次读取不冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22335841/

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