最近、トランザクションの分離レベルに関する知識が向上しました。ReadCommittedとRepeatableの違いUpdateの読み取り分離レベル
特に、私は、コミット読み取りと反復読み取りの違いをよく理解するのに問題がありました。
I've read this fantastic article私はダーティー・リード、反復不可能なリード、ファントムの読み取りについてはすべて理解していますが、更新時に複数のトランザクションが発生した場合は何も分かりません。
例:
表: "テスト"(フィールド:ID_REC - データ)
トランザクションA:
set transaction isolation level read committed;
begin transaction
update test
set DATA = 't1'
where ID_REC = 1
waitfor delay '00:00:20'
commit transaction
トランザクションB:(同じであるが別のレコードを有する)
set transaction isolation level read committed;
begin transaction
update test
set DATA = 't2'
where ID_REC = 2
commit transaction
私は2秒で両方のトランザクションを実行します。 2つ目のトランザクションは、最初のトランザクションが終了するまで開始されません。 また、クエリ(select * from test)も実行できません。
So:なぜこれが起こりますか?トランザクションは異なる行で動作します。この場合、コミット読み取りと反復読み取りの違いは何ですか?