データベース・トランザクションの繰り返し不可と幻の違い

1216 ワード

門を開けて山を見る.
繰り返し可能な読み取りは、同じクエリの再実行が保証される場合にのみ、以前に返された結果が必ず前と同じであり、他のレコードが追加されるかどうかは保証されません.これまでに出てこなかった記録を返したら、幻読みです.
独立性レベル
データベース・トランザクションの4つの独立性レベルは、現在は腐っていると信じられていますが、non-repeatable readphantomの違いを再読み込みできない文章が多く説明されていないことがわかりましたので、ここでまとめて明らかにします.
  • 未コミット(Read Uncommitted)これは、1つのトランザクションで他のトランザクションがコミットされていない中間値を読むことができ、隔離されていないことに相当することをよく理解しています.
  • がコミットした(Read Committed)ことを提案したのは、前の項目に対して、このレベルでは、1つのトランザクションで他のトランザクションがコミットした値のみを読み取ることができ、他のトランザクションの中間値は表示されません.しかし、同じトランザクションの前後2回のselectで異なる結果が返される可能性があるという問題もあります.すなわち、1回目のselect以降、中間に他のトランザクションが関連データの変更をコミットした場合、2回目のselectでは新しい値が表示され、1回目のselectと一致しません.「繰り返し不可」という用語は、繰り返し読みが複数回selectであり、繰り返し読みが複数回selectである場合、結果が異なる場合があることを意味する.
  • 繰り返し読み(Repeatable Read)混同しやすいところがここにあります.繰り返し読み取り可能なレベルは、同じトランザクションで最初にselectされたデータが、後続のselectで変わらないことを保証します.ポイントは、最初に読み取ったデータに対して、その後、これらのデータの読み取り操作が同じ結果を返すことを保証することです.問題は、範囲クエリーです.例えば、A,Bの2つのレコードが初めて読み込まれると、同じクエリーを再実行することが保証される場合にのみ、返されるA,Bのレコードは、他のレコードではなく、前のレコードと同じになります.ここでの他のレコードとは、2回目のクエリの間に他のトランザクションが挿入された新しいレコードを指します.これらの新しいレコードはちょうどあなたのwhere条件と一致しています.これにより、2回目のクエリも前と同じA,Bを返しますが、C,D,Eなどの新しいレコードが多くなる可能性があります.これを幻読と言います.
  • シリアル化は何も言うことはありません.