数据库提交是否严格按读取顺序排列?

时间:2017-12-20 18:49:38

标签: sql database transactions commit acid

在面对一些具有挑战性的并发问题时,我意识到自己并不知道这个问题的答案,并且会重视任何反馈,这让我感到惊讶。

想象一下我们称之为 Bob 的交易,执行以下操作:

UPDATE Foo SET value='A' WHERE value='B'
COMMIT;

第二个交易我们称之为 Alice ,与Bob并行运行,执行以下操作:

UPDATE Bar SET value='X' WHERE value='Y'
COMMIT;

我们无法预测Alice和Bob完成的顺序。

现在想象另外两个交易, Carol Dan ,以READ COMMITTED(或更高)隔离级别运行。它们与Alice和Bob并行运行,以便他们可能会或者可能不会"看到"爱丽丝或鲍勃的影响。他们执行以下操作:

SELECT Foo.value, Bar.value FROM Foo, Bar;

是否可能在一次运行中可能会发生以下情况:

  • Carol读取Foo.value = 'A'Bar.value = 'Y'(Alice已提交,Bob未提交)
  • Dan读Foo.value = 'B'Bar.value = 'X'(Bob承诺,Alice未承诺)

也就是说,他们是否可能只看到一个交易的影响,但看到不同的 - 或者换句话说,他们认为交易发生的顺序不同?

两者都是逻辑上可序列化的结果,可以说是原子的,一致的 和孤立的观点。

这种行为可能会因SERIALIZABLEREAD COMMITTED而有所不同吗?那些不同的平台(例如Oracle,PostGres,SQL Server,MySQL和H2)。

0 个答案:

没有答案