1

2 つのトランザクションがあるとします。

T1 - READ_COMMITTED 分離レベルの Table1 などのテーブルに書き込む大量のデータ クランチ ジョブ。T2 - SERIALIZABLE 分離レベルで Table1 からデータを読み取るトランザクション。

表 1 スキーマ

autoincrement_id(INT) データ(varchar)

T1 (READ_COMMITTED)

INSERT INTO Table1.. INSERT INTO Table1.. INSERT INTO Table1.. INSERT INTO Table1..

T2 (シリアライズ可能)

SELECT * FROM Table1 WHERE autoincrement_id > x; --何かをする

T2 が T1 の前に開始すると、事実上 T1 が停止します (正しいですか?)

しかし、T1 が T2 の前に開始され、T2 の間も進行中の場合、T2 は挿入されたが T1 によってコミットされなかったデータを読み取るでしょうか?

4

1 に答える 1

2

T2 が T1 の前に開始すると、事実上 T1 が停止します (正しいですか?)

はい正解!

しかし、T1 が T2 の前に開始され、T2 の間も進行中の場合、T2 は挿入されたが T1 によってコミットされなかったデータを読み取るでしょうか?

いいえ、T1 は事実上 T2 を停止します。したがって、T2 は T1 がコミットされるかロールバックされるのを待ちます (少なくとも理論上は...)。

于 2013-01-16T08:50:57.857 に答える