1

トランザクションDBでシリアル化できないものを誰かに説明してもらえますか? 例を教えてください。r1(x) r2(x)w1(y) c2 c1 これはシリアル化不可ですか?

4

1 に答える 1

3

次の表を想像してください ( Oracle)。

CREATE TABLE t_series (id INT NOT NULL PRIMARY KEY, value INT NOT NULL)

INSERT
INTO    t_series
VALUES  (1, 1)

INSERT
INTO    t_series
VALUES  (2, 2)

ここREAD COMMITTEDで、2 つのセッションで 2 つのトランザクションを開始します。

SET TRANSACTION ISOLATION LEVEL READ COMMITTED

次のクエリを発行します。

-- session 1
UPDATE  t_series
SET     value = 1
WHERE   value = 2
/
COMMIT
/

その後:

-- session 2
UPDATE  t_series
SET     value = 2
WHERE   value = 1
/
COMMIT
/

結果は次のようになります。

id   value
1    2
2    2

、つまり、両方のレコードがvalue = 2

最初のクエリは両方のレコードを にしましたがvalue = 1、2 番目のクエリはこれらの変更を確認し、両方のレコードを にしましたvalue = 2

レベルで同じことを行うとSERIALIZABLE、結果は次のようになります。

id   value
1    2
2    1

、つまり、クエリは を交換するだけvalueです

シリアライズ可能なトランザクションは、トランザクション自体によって行われた変更を除いて、トランザクションが開始されたときとまったく同じ状態でデータベースを認識します。

于 2010-02-17T16:50:01.670 に答える