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

时间:2014-03-11 20:23:46

标签: mysql sql concurrency transactions isolation-level

从我读到的分析交易的基本方法是冲突可序列化的概念 因此,数据库系统必须通过这种方法确保事务的调度等同于可序列化 但我无法看到这个模型在这个琐碎的例子中是如何运作的 假设如下:

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,因为串行执行的结果。

因此,从我的观点来看,这两个读取冲突的(但冲突等价理论认为它们没有冲突)

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

1 个答案:

答案 0 :(得分:1)

根据冲突可序列化WRITE操作与READWRITE操作冲突。因此,即使每个READ (A)不与另一个WRITE (A)冲突,它也会与另一个事务的{{1}}指令冲突。 有关更深入的解释,您可以考虑检查Abraham Silberschatz等人的“数据库系统概念”。人。第六版第14.6章应该澄清。

编辑:基于我之前所说的,并且添加一个计划是冲突可序列化的,如果且仅当它可以从序列中派生(没有一对事务可以并行执行)交换顺序对彼此不冲突的指令对,显然冲突可序列化的计划对任何数据库的影响将等同于串行指令。因此,我们可以得出结论,冲突可序列化可以保证一致性。

正如那样说,数据库管理员可以实现这种调度与否,对事务的一致性产生相应的影响。

相关问题