【りーどこみってど】
Read Committed とは?
最終更新:
💡 他の処理の未確定変更を読み取らない
他のトランザクションの未コミット変更を読み取らない分離レベル。ダーティリードを防ぐ一方、再読み取りの変化や行の増減は起こり得ます。PostgreSQLの例と実装の違いを解説します。
📌 このページのポイント
Read Committedは、何を読まない設定?
自分が変更したものも、コミットするまで見えない?
同じトランザクションなら、何回読んでも同じ値?
そうとは限らないよ。PostgreSQLの通常のSELECTは、文の開始時点のスナップショットを見る。二つのSELECTの間に他のトランザクションがコミットすると、二回目は変更後の値を読むことがあるんだ。
行が増えたり減ったりすることもある?
ロックが少なくて、いつでも速い?
実装や設定、処理の内容によるよ。SQL ServerではRead Committedでも、共有ロックを使う設定と行の版を使う設定がある。更新の競合では待つこともあるので、名前だけで性能を決めないようにしよう。
もっと詳しく知りたい人へ
分離レベルを上げれば、業務の誤りはすべてなくなる?
業務ルールの制約や更新方法、トランザクションの範囲も設計します。たとえば読んだ残高をもとに後で更新する処理では、競合をどう防ぐかが必要です。分離レベルだけを変えて、入力検証や制約まで不要になるわけではありません。
SQL標準の表が、そのまま全製品の挙動?
製品は標準より強い保証を提供することもあります。PostgreSQLではRead UncommittedはRead Committedと同じ動作で、Repeatable Readもファントムリードを防ぎます。使う製品と設定の資料を確認し、単純な速度や安全性の順位だけで選ばないようにします。
まとめ:ざっくりこれだけ覚えればOK!
「Read Committed」って出てきたら「ほかのトランザクションの未確定な変更を読まない分離レベル」と思えばだいたいOK!同じ問い合わせが、毎回同じ結果になる保証ではないよ。
📖 おまけ:英語の意味
「Read Committed」 = コミット済みのデータを読む
💬 トランザクション分離レベルの名前です。他のトランザクションの変更をどこまで見せるかを扱います。「安全性」の一言で、業務上の正しさや性能まで決まるものではありません。